117 votes

référence indéfinie à boost :: system :: system_category () lors de la compilation

J'essaie de compiler un programme sur Ubuntu 11.10 qui utilise les bibliothèques Boost. Les bibliothèques 1.46-dev Boost du référentiel Ubuntu sont installées, mais je reçois une erreur lors de la compilation du programme.

undefined reference to boost::system::system_category()

Qu'est-ce que je fais mal?

168voto

hc_ Points 1191

La bibliothèque boost que vous utilisez dépend de la bibliothèque boost_system. (Tous ne le font pas.)

En supposant que vous utilisiez gcc, essayez d’ajouter -lboost_system à la ligne de commande de votre compilateur afin de créer un lien avec cette bibliothèque.

17voto

user1055604 Points 917

L'erreur ci-dessus est une erreur de l'éditeur de liens... l'éditeur de liens d'un programme qui prend un ou plusieurs objets générés par le compilateur et les combine en un seul fichier exécutable du programme.

Vous devez ajouter '-l boost_system " de l'éditeur de liens drapeaux qui indique à l'éditeur de liens qu'il faut regarder pour les symboles boost::system::system_category() dans la bibliothèque libboost_system.so

Si vous avez main.cpp soit:

g++ main.cpp -o main -lboost_system

OU

g++ -c -o main.o main.cpp
g++ main.o -lboost_system

6voto

volker Points 41

J'ai le même problème:

 g++ -mconsole -Wl,--export-all-symbols -LC:/Programme/CPP-Entwicklung/MinGW-4.5.2/lib  -LD:/bfs_ENTW_deb/lib   -static-libgcc -static-libstdc++ -LC:/Programme/CPP-Entwicklung/boost_1_47_0/stage/lib   \
 D:/bfs_ENTW_deb/obj/test/main_filesystem.obj \
 -o D:/bfs_ENTW_deb/bin/filesystem.exe -lboost_system-mgw45-mt-1_47 -lboost_filesystem-mgw45-mt-1_47
 

D: /bfs_ENTW_deb/obj/test/main_filesystem.obj: main_filesystem.cpp :(. Text + 0x54): référence non définie à `boost :: system :: generic_category ()

La solution consistait à utiliser la version debug de la librairie system-lib:

 g++ -mconsole -Wl,--export-all-symbols -LC:/Programme/CPP-Entwicklung/MinGW-4.5.2/lib  -LD:/bfs_ENTW_deb/lib   -static-libgcc -static-libstdc++ -LC:/Programme/CPP-Entwicklung/boost_1_47_0/stage/lib   \
 D:/bfs_ENTW_deb/obj/test/main_filesystem.obj \
 -o D:/bfs_ENTW_deb/bin/filesystem.exe -lboost_system-mgw45-mt-d-1_47 -lboost_filesystem-mgw45-mt-1_47
 

Mais pourquoi?

2voto

jcomeau_ictx Points 15736

dans mon cas, l'ajout d' -lboost_system n'était pas assez, il ne pouvait toujours pas trouver dans ma version personnalisée de l'environnement. J'ai eu à utiliser les conseils à se débarrasser de la "gcc /usr/bin/ld: warning lib introuvable" et de changer mon ./configure commande à:

./configure CXXFLAGS="-I$HOME/include" LDFLAGS="-L$HOME/lib -Wl,-rpath-link,$HOME/lib" --with-boost-libdir=$HOME/lib --prefix=$HOME

pour plus de détails, voir Boost 1.51 : "erreur: impossible de lien contre boost_thread !"

1voto

formiaczek Points 89

... et au cas où vous souhaiteriez lier statiquement votre principal, ajoutez dans votre Jamfile ce qui suit aux exigences:

 <link>static
<library>/boost/system//boost_system
 

et peut-être aussi:

 <linkflags>-static-libgcc
<linkflags>-static-libstdc++
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X