为什么"未定义引用`boost :: system :: generic_category"即使我链接到boost_system

Ste*_*and 17 linker gcc boost

如果我没有放置-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): In function `__static_initialization_and_destruction_0(int, int)':
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()'

你知道我应该调查什么来解决这个问题吗?(我使用gcc 4.6.3)

Sam*_*ler 27

您链接库的顺序很重要,在您的情况下,您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()'
Run Code Online (Sandbox Code Playgroud)

要解决此问题,您应该将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** 
Run Code Online (Sandbox Code Playgroud)

或者,构建libmylibrary.so为共享库并boost_system直接链接到库.

  • 今天救了我的命! (4认同)
  • 救了两条人命!(至少) (3认同)
  • 使用 boost 1.65.0,我在 `filesystem` 之前链接了 `system`,它运行良好。使用 boost 1.68.0 我不得不颠倒顺序。请注意,这两个 lins 不是使用完全相同的脚本/jam 文件编译的。显然,他们可以改变“系统”应该最后或最先链接的事实...... (2认同)