尽管链接正确,但不确定的提升参考

Undefined boost reference despite correct linking

本文关键字:不确定 参考 链接      更新时间:2023-10-16

我发现了很多类似的问题,但是我无法为我应用任何给定的解决方案。几个月前,我使用Boost库从事一个项目。我只是在命令行中编译,如Boost网站上所述。

g++ -I pathToBoost file.cpp -o file -lboost_system -lboost_filesystem

还完成了与BOOstrongYSTEM和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'

好吧,在我看来,链接boostrongystem库有一个错误。由于以前有同样的事情,因此编译器的问题可能吗?

我使用

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的一个版本的标题,但链接您的系统Boost的错误库。