J'essaie d'installer plusieurs versions du compilateur g ++ à des fins de test.
J'aimerais pouvoir installer g++ 4.9.3
, 5.1.0
, 5.2.0
et 6.1.0
.
Je sais que je peux faire
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
mais dans mes tests, ils finissent tous par utiliser la bibliothèque standard installée par le système, qui est la bibliothèque standard de la série g++-4
-. Je peux le dire, car lorsque je compile du code, la bibliothèque standard ne fait pas certaines choses que le standard C++ 11 dit devoir faire, par exemple, le constructeur de mouvement std::string
n'est pas marqué noexcept
. Mais sur ubuntu-xenial, qui a la bibliothèque standard gcc-6, c’est le cas, et d’autres problèmes connexes sont résolus.
Je peux voir qu'il existe des packages nommés libstdc++-4.8-dev
par exemple dans le référentiel Ubuntu, mais lorsque j'installe les nouveaux compilateurs, ils ne semblent pas les utiliser.
Je sais aussi que je peux installer les compilateurs à partir des sources dans mon répertoire personnel, mais leur construction prend tellement de temps que je ne peux malheureusement pas le faire dans travis-ci
malheureusement. Dans travis-ci, toutes les constructions sont arrêtées après une heure.
Existe-t-il un moyen simple de configurer les compilateurs qui s’installent depuis un ppa pour utiliser les versions correctes de la bibliothèque standard C++, c’est-à-dire celle avec laquelle ils ont été publiés plutôt que la valeur par défaut du système?
Existe-t-il un moyen simple d'installer un binaire du compilateur avec toutes ses bibliothèques associées dans un dossier de mon répertoire personnel à l'aide d'apt-get qui ne nécessite pas de construction à partir du source?
J'ai trouvé ces instructions , qui dit que je peux utiliser un indicateur -rpath
ou un fichier de spécifications, ou ajuster LD_LIBRARY_PATH
, mais je ne suis pas sûr de savoir quels chemins Je devrais être couché. Un autre problème est que, il ne s’agit pas seulement de l’éditeur de liens dynamique, les compilateurs ubuntu-toolchain-r/test
semblent utiliser les en-têtes système libstdc++
également, donc j’ai besoin de corriger cela d’une façon ou d’une autre.
Ma stratégie actuelle consiste simplement à télécharger l'archive tar du code source et à essayer de manipuler les indicateurs de configuration jusqu'à ce que je puisse trouver le moyen de le construire en moins de 60 minutes. Une fois que je le construis une fois, il se trouve dans mon répertoire "cache" afin que les futures constructions de mon projet puissent obtenir l'image en moins d'une minute.
La fonctionnalité "cache" est uniquement disponible lors de l'utilisation des images travis d'ubuntu-precise (12.04 LTS), aussi je ne peux même pas utiliser trusty ici.
Ma ligne de configuration est actuellement:
${GCC_SRC_DIR}/configure --prefix=${GCC_DIR} --disable-checking --enable-languages=c,c++ --disable-multilib --disable-bootstrap
Je le fais principalement à partir de instructions de ce type .
Il y a aussi un ancien rapport de bogue qui le mentionne.
L'option --disable-checking
n'est pas vraiment documentée, alors elle est peut-être obsolète. L'option --disable-bootstrap
est documentée. J'espère que cela m'empêchera de compiler le compilateur trois fois comme décrit ici ... je ne sais pas dans quelle mesure cela fonctionnera.
J'utilise make -j2 --quiet
pour construire après.
Travaille maintenant avec une ligne plus longue:
${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
Configuration de gcc-5.x: cd build-gcc-5.x/
../gcc-5.3.0/configure --prefix=/usr/local/gcc53 --program-suffix=53 --enable-languages=c,c++ --with-system-zlib --disable-multilib --disable-libstdcxx-pch
(Requiert Sudo apt install zlib1g-dev
, si --with-system-zlib
)
À propos de la "limite de 60 minutes": Vous pouvez quitter le terminal après, disons, 55 minutes et continuer plus tard avec make
.