Estou tentando instalar várias versões do compilador g ++ para fins de teste.
Gostaria de poder instalar g++ 4.9.3
, 5.1.0
, 5.2.0
e 6.1.0
.
Eu sei que posso fazer
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y;
sudo apt-get update -qq
sudo apt-get install g++-4.9, g++5.1, g++5.2, g++6
mas em meus testes, todos eles acabam usando a biblioteca padrão instalada pelo sistema, que é a biblioteca padrão g++-4
-series. Eu posso dizer porque quando eu compilo o código, a biblioteca padrão não faz algumas coisas que o padrão C ++ 11 diz que deve fazer, por exemplo, o construtor std::string
move não está marcado como noexcept
. Mas no ubuntu-xenial, que tem biblioteca padrão do gcc-6, é, e outros problemas relacionados são resolvidos.
Eu posso ver que existem pacotes chamados libstdc++-4.8-dev
, por exemplo, no repositório do Ubuntu, mas quando eu instalo os novos compiladores eles não parecem usá-los.
Eu também sei que posso instalar compiladores a partir do código-fonte em meu diretório pessoal, mas construí-los demora tanto que não posso fazê-lo dentro de travis-ci
, infelizmente. Em travis-ci, tudo constrói o tempo limite após uma hora.
Existe uma maneira fácil de configurar os compiladores que se instalam a partir de um ppa para usar as versões corretas da biblioteca padrão C ++, ou seja, aquela em que foram liberados em vez do padrão do sistema?
Existe uma maneira fácil de instalar um compilador binário com todas as suas bibliotecas associadas em uma pasta no meu diretório pessoal usando o apt-get que não envolve a construção a partir do código-fonte?
Encontrei estas instruções , que dizem que posso usar uma -rpath
flag ou um arquivo specs, ou ajuste LD_LIBRARY_PATH
, mas o que eu não tenho certeza é quais caminhos eu devo definir. Outra questão é que, não é apenas o vinculador dinâmico, os compiladores ubuntu-toolchain-r/test
parecem estar usando o sistema libstdc++
headers também, então eu preciso corrigir isso de alguma forma.
Minha estratégia atual é apenas fazer o download do tarball de liberação do código-fonte e tentar mexer com os flags de configuração até que eu possa encontrar uma maneira de construí-lo em & lt; 60 minutos. Depois de conseguir que ele seja compilado uma vez, ele está no meu diretório "cache" para que futuras compilações do meu projeto obtenham a imagem em & lt; 1 minuto.
O recurso "cache" só está disponível ao usar as imagens travis do ubuntu-precision (12.04 LTS), então não posso usar o trusty aqui.
Minha linha de configuração está atualmente:
${GCC_SRC_DIR}/configure --prefix=${GCC_DIR} --disable-checking --enable-languages=c,c++ --disable-multilib --disable-bootstrap
Estou fazendo isso principalmente com base nas instruções desse cara .
Existe também um relatório de erros antigo que o menciona.
A opção --disable-checking
não está realmente documentada, então talvez esteja extinta. A opção --disable-bootstrap
está documentada, espero que me impeça de realmente compilar o compilador três vezes conforme descrito aqui ... não tenho certeza da probabilidade de isso funcionar.
Estou usando make -j2 --quiet
para realmente criar depois disso.
Agora trabalhando com uma linha mais longa:
${GCC_SRC_DIR}/configure --prefix=${GCC_DIR} --disable-checking --enable-languages=c,c++ --disable-multilib --disable-bootstrap --disable-libsanitizer --disable-libquadmath --disable-libgomp --disable-libssp --disable-libvtv --disable-libada --enable-version-specific-runtime-libs