我发现了很多类似的问题,但我无法为我应用任何给定的解决方案。几个月前,我在做一个使用 boost 库的项目。我只是在命令行中编译,如 boost 网站上所述。
g++ -I pathToBoost file.cpp -o file -lboost_system -lboost_filesystem
到 boost_system 和 boost_filesystem 的两个必需链接也已完成。这工作得很好,但现在当我试图再次编译它时突然发生错误。
/usr/bin/ld: /tmp/ccM2BzEo.o: in function `boost::system::generic_category()':
file.cpp:(.text._ZN5boost6system16generic_categoryEv[_ZN5boost6system16generic_categoryEv]+0x7):
undefined reference to `boost::system::detail::generic_category_instance'
好吧,在我看来,链接 boost_system 库时出错。由于之前同样的事情有效,是否可能是编译器的问题?
我用过
Boost 1.68.0
g++ (GCC) 8.2.1
ManjaroLinux 18.0.3
我希望有人能在这里帮助我,并且我不是太笨以至于无法在另一个线程中看到解决方案。
您好!
最佳答案
链接器命令行中库的顺序很重要。 boost_filesystem
取决于 boost_system
,因此修复:
-lboost_filesystem -lboost_system
或者,您可以用 --start-group
将库列表括起来和 --end-group
使链接器多次重新扫描库,直到它失败或解析所有符号,这样就不需要在命令行中对库进行特定排序。但是,链接可能需要更长的时间。例如:
g++ -I pathToBoost file.cpp -o file -Wl,--start-group -lboost_system -lboost_filesystem -Wl,--end-group
由于您指定了 -I pathToBoost
您还需要指定 -L<path-to-boost-libs> -Wl,-rpath=<path-to-boost-libs>
.否则它使用来自 pathToBoost
的一个版本的 boost 的 header , 但从您的系统 boost 中链接了错误的库。
关于c++ - 尽管链接正确,但未定义的 boost 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54769030/