web-dev-qa-db-ja.com

boost_systemに対してリンクしているのに、なぜ「 `boost :: system :: generic_categoryへの未定義の参照」

-lboost_systemフラグを付けていなかった場合、このエラーメッセージは理解できますが、実際には次のとおりです。

 g ++ -o build/myproject build/main/main.o -L/usr/local/boost/boost_1_52_0/boost/libs -L/usr/lib -Lbuild-L。 -lboost_system -lboost_thread -lpthread -lboost_regex -lpq -lmylibrary 
 build/libmylibrary.a(library.o):関数 `__static_initialization_and_destruction_0(int、int) ':
 library.cpp :(。 text + 0x25f): `boost :: system :: generic_category() 'への未定義の参照
 library.cpp :(。text + 0x269):` boost :: system :: generic_category()'への未定義の参照.____。] library.cpp :(。text + 0x273): `boost :: system :: system_category() '
への未定義の参照

問題を解決するために何を調査すればよいかわかりますか? (私はgcc 4.6.3を使用します)

17

ライブラリをリンクする順序は重要です。あなたの場合、明らかにlibrary.cppライブラリを使用するboost_systemがあります。

library.cpp:(.text+0x25f): undefined reference to `boost::system::generic_category()'
library.cpp:(.text+0x269): undefined reference to `boost::system::generic_category()'
library.cpp:(.text+0x273): undefined reference to `boost::system::system_category()'

これを解決するには、boost_systemライブラリをリンク行の最後に移動する必要があります

g++ -o build/myproject build/main/main.o -L/usr/local/boost/boost_1_52_0/boost/libs -L/usr/lib -Lbuild -L. -lboost_thread -lpthread -lboost_regex -lpq -lmylibrary **-lboost_system** 

または、libmylibrary.soを共有ライブラリとしてビルドし、boost_systemライブラリに直接リンクします。

28
Sam Miller