Encore un autre “ld: symbole(s) ne se trouvent pas pour l'architecture x86_64” problème avec boost, cette fois avec mgiza
Je m'excuse de poser cette question; je ne trouve pas de solution qui fonctionne ou est assez clair pour moi à mettre en œuvre. Je suis simplement en train d'essayer d'installer mgiza. Voici le fichier d'INSTALLATION:
cmake .
make
make install
If you want to install to a custom location, add the following flag when you run cmake:
-DCMAKE_INSTALL_PREFIX=/path/to/custom/location
NOTE: Boost Version 1.48 has problem with the code, you can use either 1.46 or 1.50+. Unfortunately 1.48 is shipped with Ubuntu 12.04 LTS, you can either download and compile libboost 1.50+ from their website, or just do this:
sudo apt-get install libboost1.46-all-dev
À l'air facile, droit? En tapant dans cmake .
fonctionne sans aucun problème apparent. Malheureusement, make
s'exécute dans cette terrible erreur ("les symboles non définis ...") avec boost.
1 warning generated.
Linking CXX executable ../bin/d4norm
Undefined symbols for architecture x86_64:
"std::string::_Rep::_M_destroy(std::allocator<char> const&)", referenced from:
boost::system::(anonymous namespace)::generic_error_category::message(int) const in libboost_system-mt.a(error_code.o)
"std::string::_Rep::_S_empty_rep_storage", referenced from:
boost::system::(anonymous namespace)::generic_error_category::message(int) const in libboost_system-mt.a(error_code.o)
"std::string::assign(char const*, unsigned long)", referenced from:
boost::system::(anonymous namespace)::generic_error_category::message(int) const in libboost_system-mt.a(error_code.o)
"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)", referenced from:
boost::system::(anonymous namespace)::generic_error_category::message(int) const in libboost_system-mt.a(error_code.o)
"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&)", referenced from:
boost::system::(anonymous namespace)::generic_error_category::message(int) const in libboost_system-mt.a(error_code.o)
"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()", referenced from:
boost::system::(anonymous namespace)::generic_error_category::message(int) const in libboost_system-mt.a(error_code.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Basées sur d'autres questions, c'est un problème avec Mavericks, car il utilise clang pour compiler du code c++, ce qui implique que la bibliothèque libc++, pas libstdc++. Pour être complet, et afin que d'autres puissent reproduire mes erreurs, je suis sous OS X 10.9.5, Xcode 6.1, et mon boost version 1.56 (boost a été installée via homebrew).
Maintenant, il y a certains fixer là-bas, à droite? Nous allons passer au travers de certains d'entre eux:
- L'application de l'-m32 drapeau: ne s'applique pas parce que le Makefile
n'ont pas de "g++", et il a également explicitement me dit de ne PAS
le modifier, parce que c'est un "Cmake" fichier généré. - Ne pas définir quelque chose dans un fichier d'en-tête: ne s'applique pas parce que le code doit être prêt à compiler.
- L'ajout d'-stdlib=libstdc++ à l'éditeur de liens: Je ne suis pas sûr de la façon d'ajouter cette page à un
make
commande? J'ai essayé tout à faitmake -stdlib=libstdc++
et tout ce qui semblait éviter les erreurs ci-dessus, il introduit des erreurs supplémentaires:make: *** [all] Error 2
(pas sûr de ce que cela signifie). - La liaison à la bonne bibliothèques boost: Il y a un commentaire qui dit "Vous avez juste besoin de lien vers la bonne bibliothèques boost ... beaucoup de questions/réponses sur la façon de le faire". Malheureusement, je ne pense pas que l'une des questions que l'auteur est lié à l'adresse de mon problème.
- La liaison Qt avec boost: Je ne pense pas que ce soit applicable parce que je ne suis pas à l'aide de Qt, et je ne sais pas où je l'avais mis dans un
LIBS += [...] boost
ligne. - Liaison d'un fichier manquant: Cette question semble être plus sur la liaison lors de l'exécution de
g++
mais je suis à l'aide d'un Makefile qui n'ont pasg++
n'importe où. - À l'aide de g++ vs gcc: Je ne sais pas comment je peux changer qui de ces que j'utilise, parce que je suis en utilisant
cmake
etmake
... - Modification d'un lien de commande: Encore une fois, je ne sais pas comment je peux changer la compilation de
cmake
/make
àgcc
. (Note: à partir de ce point, je vais ignorer la plupart des questions qui sont traitées par l'ajout de quelque chose de gcc ou g++.) - La modification de la bibliothèque c++ standard: la solution consiste à aller dans Xcode et l'évolution des bibliothèques. Je ne pense pas que ce soit la bonne approche et, en tout cas, je serais probablement vis quelque chose si j'ai changé un paramètre dans Xcode (je n'ai aucune expérience avec Xcode GUI).
- Associant les bibliothèques dans Xcode: Je pense que c'est un cas similaire en tant que #9 sur cette liste. Ici, la réponse recommande également à l'aide de homebrew au lieu de macports pour l'installation de boost, mais je l'ai déjà dit plus haut, j'ai utilisé homebrew pour l'installation de boost.
- Compiler avec clang: Un problème similaire, mais comment puis-je obtenir cmake ou make pour compiler avec clang?
- À partir d'un (populaire) bitcoin problème: Maintenant ce semble intéressant! Une tonne de gens ont couru dans mon erreur. Malheureusement, il ne semble pas exister de consensus ou de solution facile. Il y a aussi quelques solutions que je ne sais pas à mettre en œuvre. Par exemple, une solution par "imbolo" il est de compiler boost à l'aide d'un cxxflag drapeau, mais qu'est-ce que cela signifie?
Donc je suis un peu une perte sur la façon d'installer correctement mgiza ... je veux dire, le point de l'ensemble de mgiza me donner cmake
et make
est ainsi que je ne pas avoir à vous soucier du désordre détails de la compilation de choses, non? Ce n'est pas seulement un mgiza question, bien que, depuis que j'ai rencontré ce problème lors de la tentative de faire make
ailleurs. Je comprends le haut niveau idées de (C)Makefiles, mais pas les détails de bas niveau.
cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ .
Merci, mais si cela ne semble forcer l'utilisation de llvm et clang++, j'ai fini par trouver cette erreur suivant
make
: /bin/sh: $HOME/mgiza/mgizapp/clang++: Aucun fichier ou répertoire. Il se passe littéralement à droite après le démarrage de make
.ensuite, essayez de chemins absolus pour compilateur clang (ne sais pas où il en fait situé dans OSX)
En fait, je pense que votre suggestion a travaillé dans plus de quelque chose d'autre que j'ai fait. J'ai eu Xcode 6.1 et outils de ligne de commande, mais quand j'ai commencé Xcode (en cliquant dans le dossier Applications), il dit qu'il y avait certaines choses qui avaient besoin d'être installé. Peut-être que c'était la solution? Je vais jouer avec mgiza un peu et de lui faire rapport. Il y avait une TONNE de mises en garde, mais pas d'erreur, lorsque vous faites des
make
. Les avertissements ont été pour la plupart de cette forme: add explicit braces to avoid dangling else [-Wdangling-else]
Bonne question mais sans réponse juste encombre le site web. Si la réponse n'est pas la peine de poster alors peut-être que la question doit être supprimée (en dépit de la voix). DONC est sujet d'un endroit pour trouver des réponses définitives à des questions utiles.
OriginalL'auteur ComputerScientist | 2014-11-16
Vous devez vous connecter pour publier un commentaire.
À répondre à certaines des préoccupations exprimées par les intervenants: la meilleure façon de traiter ce problème est d'essayer de l'effacer de votre système autant que possible et de commencer le processus à partir de zéro.
Aussi, comme cela a été posté, OS X 10.10 Yosemite a été libéré, ce qui pourrait avoir résolu ce problème (SI ce problème est principalement dû à 10,9 et le cliquetis/gcc compilateur changements).
OriginalL'auteur ComputerScientist