bibliothèque introuvable -lboost_system
J'ai installé stimuler à l'aide de macports. Les fichiers apparaissent dans /opt/local/include/boost/
Mon makefile ne fonctionne plus et j'obtiens l'erreur suivante
Undefined symbols:
"boost::system::generic_category()", referenced from:
__static_initialization_and_destruction_0(int, int)in client.o
__static_initialization_and_destruction_0(int, int)in client.o
"boost::system::system_category()", referenced from:
boost::asio::error::get_system_category() in client.o
boost::system::error_code::error_code()in client.o
__static_initialization_and_destruction_0(int, int)in client.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [client] Error 1
à l'école, la solution a été d'utiliser -lboost_system comme un argument de g++, mais maintenant que j'ai pris le projet à la maison à mon mac, cela ne fonctionne pas. Je pense que c'est surtout dû au fait qu'à l'école, le coup de pouce fichiers ont été au usr/local/lib (ou similaire).
Quand j'ajoute de l'-lboost_system argument je reçois le message suivant
g++ -I/opt/local/include -lboost_system -o client client.o Packet.o
ld: library not found for -lboost_system
collect2: ld returned 1 exit status
make: *** [client] Error 1
J'ai essayé quelques variantes grâce à l'-L et-L, mais je n'arrive pas à trouver un combo qui fonctionne. À l'école, j'ai aussi ne pas avoir à utiliser -L. j'ai lu quelques posts ici sur des problèmes similaires, mais ils en ont fixé par l'ajout de drapeaux-l qui ne coûtent pas de travail pour moi.
Aider! merci!
OriginalL'auteur jim | 2011-07-17
Vous devez vous connecter pour publier un commentaire.
Il vous manque un
-L/opt/local/lib
. Vous devriez être en mesure de définir laLDFLAGS
dans votre Makefile:Cela suppose que les bibliothèques Boost sont en
/opt/local/lib
de cours.Si vous n'utilisez pas l'habitude
CXXFLAGS
etLDFLAGS
variables dans votre Makefile, puis ajouter le-L/opt/local/lib
directement dans votre règle finale:La
-I
seulement indique au compilateur où les fichiers d'en-tête sont, l'éditeur de liens a besoin de bibliothèques et que vous utilisez-L
.Il a travaillé! merci beaucoup. J'ai beaucoup à apprendre.
Vous avez au moins une autre chose à apprendre.. Vous devez accepter la réponse si elle est correcte. C'est la façon dont cette collaboration Q&Un système qui fonctionne.
lol. Ne vous inquiétez pas, je l'ai eu.
Pour les gars qui ont le même problème après l'installation de boost en utilisant le port: vous souhaiterez peut-être utiliser boost_system-mt au lieu de boost_system. Vérifier /opt/local/lib/libboost* pour voir ce que des noms que vous avez fait.
OriginalL'auteur mu is too short
Vous pouvez essayer de chercher dans votre système comme ceci :
si la bibliothèque est installée, elle doit montrer quelque chose comme ceci:
ou il montrera juste une ligne vide
Dans votre cas, il semble que boost est installé dans un autre lieu, d'où la nécessité pour plus d'informations de l'éditeur de liens, d'où la nécessité pour le commutateur-L, si toutefois vous l'avez dans /usr/lib, comme je l'ai ensuite pas besoin d'autres infos dans le fichier makefile
OriginalL'auteur serup