Eu trabalho em um cluster de computação executando CentOS6/RHEL6 que compartilho com cerca de 100 outros usuários, supervisionado por um único administrador de TI.
Recentemente, comecei a escrever em C++ e parte do meu código depende do C++ 11. De acordo comesta página da web, o C++ 11 é compatível com gcc
as versões 4.8.1 e superiores.
Infelizmente, o cluster de computação possui a versão 4.4.7.
Há pouco tempo, por um motivo diferente, tentei instalar gcc
a versão 4.8.4 em um local no meu diretório inicial no cluster. A instalação falhou, comesta mensagem de erro. Algumas pesquisas no Google me levaram a acreditar que eu deveria atualizar glibc
, então tentei instalar uma versão mais recente em meu diretório inicial. Quefalhou dramaticamente.
Meu administrador de TI concluiu: "Provavelmente não funcionará modificar a versão gcc
no cluster". Antes de irritá-la com mais perguntas (porque neste momento euprecisaruma versão atualizada doalgunsCompilador C), estou coletando estes:
(1) A instalação da gcc
versão 4.8.1+ em minha conta de usuário é viável? (Depois que tentei fazer isso da última vez, algumas pessoas disseram que era uma ideia fundamentalmente terrível.)
(2) Se a resposta para (1) for sim, que cuidados devo tomar desta vez para garantir que a instalação seja bem-sucedida? A instalação glibc
na minha conta é necessária? Isso é viável?
(3) Se a resposta para (1) for não, seria viável para meu administrador de TI instalar uma versão mais recente em gcc
todo o sistema, sem interromper o código que depende da versão já presente?
(4) Se nenhuma das opções acima for viável gcc
, a situação muda com outro compilador C?
Para resumir, estou procurando alguém com conhecimento gcc
(ou outro compilador C) para explicar como uma pessoa (sem sudo
autoridade) faria para atualizá-lo, se isso fosse possível.
Responder1
Consegui construir o GCC 4.8.5 a partir do código-fonte em um diretório inicial no Centos 6.7. Estou usando a distro glibc; Eu não tive que construir o glibc.
Advertência: estou fazendo isso em um sistema onde as dependências de construção do pacote fonte GCC 4.4.x da distribuição estão instaladas, bem como o libmpc-devel
pacote do repositório epel. Se eles estiverem faltando, talvez seja necessário construí-los a partir do código-fonte em um diretório inicial e alterar o processo de construção do gcc de alguma forma para usá-los a partir daí (se isso for possível).
Construindo o CCG:
Pegue a fonte do GCC
curl -LO https://mirrors.kernel.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.bz2
Extrair
tar xf gcc-4.8.5.tar.bz2
Crie um diretório de construção fora do diretório de origem do GCC e vá até ele
mkdir build && cd build
Configurar. Eu fiz:
../gcc-4.8.4/configure --build=x86_64-linux-gnu --prefix=/home/rakslice/gcc_4_8 \ --enable-checking=release --enable-languages=c,c++,fortran \ --disable-multilib --program-suffix=-4.8
Construir. Eu tenho 4 núcleos, então fiz:
make -j 5
Instalar
make install
Agora posso compilar e executar alguns códigos de teste.
/home/rakslice/gcc_4_8/bin/g++-4.8 hello.cpp -o hello ./hello Hello, World!
Responder2
Em relação às suas perguntas específicas:
(1) Sim, é viável, mas pode não ser divertido.
(2) Não, normalmente você pode usar o sistema glibc. Do gcc você precisa libstdc++
, libgcc
etc.
Minha abordagem seria seguir oinstruções oficiais muito próximoe só recorra a uma instrução não oficial se ela corresponder muito bem à sua plataforma.
Na verdade, eu não me incomodaria com o 4.8 e iria direto para uma das séries de lançamentos atuais (5.2 ou 4.9).
Nota: Eu mesmo não fiz a instalação não-root do gcc, mas trabalho em sistemas que mantêm versões diferentes do gcc como módulos gnu.