Comment configurer libstdc++ avec GCC 4.8?
A quelques temps, j'ai décidé de passer à GCC 4.8 afin d'obtenir un démarrage rapide sur c++11 caractéristiques. Je me suis un peu dérouté, cependant, et n'a pas vraiment mis tout les nouvelles fonctionnalités de l'utiliser jusqu'à ce qu'un projet il y a quelques jours (le nouveau compilateur semble avoir été fonctionne bien, mais c'est peut être juste parce que je n'étais pas l'utilisation de toute nouvelle fonctionnalité.)
Dans ce nouveau projet, lorsque j'ai compilé avec l' =std=c++11 drapeau, je n'ai eu aucun problèmes. Cependant, au moment de l'exécution, j'obtiens l'erreur:
./main: /usr/lib/i386-linux-gnu/libstdc++.so.6: version
GLIBCXX_3.4.18' ne trouve pas (exigé par ./principal)`
Je suppose qu'il y a un problème de liaison à un plus moderne libstdc++ de la bibliothèque associée avec GCC 4.8, mais je ne peux pas pour la vie de me comprendre comment résoudre ce problème ou si la bibliothèque appropriée devrait être. Je me souviens symboliquement liaison la g++ et gcc binaires gcc-4.8, qui semble fonctionner, puisque g++ -v
retourne:
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/app/gcc/4.8.0/libexec/gcc/i686-pc-linux-gnu/4.8.0/lto-wrapper
Target: i686-pc-linux-gnu
Configured with: ./gcc-4.8.0/configure --prefix=/app/gcc/4.8.0
Thread model: posix
gcc version 4.8.0 (GCC)
Un autre thread en ligne m'a conduit à regarder la ldd
de sortie pour le programme, qui ne me montrer que la structure de répertoire pour la libstdc++ bibliothèques être lié à était différente de la structure de répertoire pour les fichiers binaires. Je ne pouvais pas, cependant, trouver le bon libstdc++
bibliothèques dans le dernier, donc je ne sais pas où chercher. La sortie de ldd main
est:
./main: /usr/lib/i386-linux-gnu/libstdc++.so.6: version
GLIBCXX_3.4.18' ne trouve pas (exigé par ./principal)
linux-gate..1 => (0xb7791000)
libstdc++..6 => /usr/lib/i386-linux-gnu/libstdc++..6 (0xb768e000)
libm..6 => /lib/i386-linux-gnu/libm..6 (0xb7662000)
libgcc_s..1 => /lib/i386-linux-gnu/libgcc_s..1 (0xb7644000)
libc..6 => /lib/i386-linux-gnu/libc..6 (0xb749b000)
/lib/ld-linux..2 (0xb7792000)`
Je ne sais pas exactement où cela se passe mal, et je vais continuer à Googler et autour de la recherche des réponses, mais toute aide que vous les gars pourrait offrir serait grandement apprécié. Si quelque chose n'est pas claire sur la question ou j'ai oublié quelques informations, faites le moi savoir et je vais essayer d'ajouter que dans. Merci beaucoup!
OriginalL'auteur paul | 2013-05-30
Vous devez vous connecter pour publier un commentaire.
Vous devez dire à votre éditeur de liens dynamique (il est exécuté lorsque vous exécutez votre programme) où trouver de la bibliothèque. Ensemble
LD_LIBRARY_PATH
le chemin de la bibliothèque (probablement quelque part sous/app/gcc/4.8.0/lib
ou quelque chose).Utilisation
find /app/gcc/4.8.0 -name "libstdc++.so.6"
. Ajouter le répertoire à votre LD_LIBRARY_PATH. e.g avec le chemin que j'ai mentionné:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/app/gcc/4.8.0/lib
(si vous utilisez un bourne-shell qui par défaut sur Linux).Puis essayez d'exécuter votre programme.
Si cela fonctionne, vous aurez probablement besoin de configurer votre éditeur de liens dynamique de regarder dans le répertoire sans l'aide de LD_LIBRARY_PATH. Voir
man ld.so
pour plus de détails sur la façon de configurer le chemin d'accès.stackoverflow.com/questions/17220872/linking-g-4-8-to-libstdc
Alors, comment est-ld.donc le travail? Ne vous lancez juste
ld.so --library-path /app/gcc/4.8.0/lib
à partir d'un terminal et il est toujours comme par magie utilisé de partout sur le système pour que l'utilisateur comme si elle était surLD_LIBRARY_PATH
? Si oui, pourquoi est-ce mieux que d'utiliserLD_LIBRARY_PATH
?ld.donc, - library-path bla juste invoque l'éditeur de liens avec ce chemin de recherche. Il ne change pas la configuration par défaut de l'éditeur de liens (au moins sous Linux). Si vous voulez changer son chemin de recherche par défaut, vous devrez probablement modifier /etc/ld..conf ou quelque chose de similaire. l'homme ld.donc, vous donnera tous les détails.
OriginalL'auteur Guillaume