c++ - 尽管链接正确,但未定义的 boost 引用

标签 c++ boost

我发现了很多类似的问题,但我无法为我应用任何给定的解决方案。几个月前,我在做一个使用 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/

相关文章:

c++ - Boost 为结构分配 list_of

c++ - 测试是否使用 Boost.Log 生成日志消息

C++ boost函数重载模板

c++ - 使应用程序在使用 Win7 功能的 WinXP/Vista 上运行

c++ - 是否有其他类型的 void_t 的标准概括?

c++ - 64 位中指针和整数的模板重载问题

c++ - boost 构建 : Use a feature or a variable

使用 Boost 的 C++ 阻塞队列

c++ - 通过setargreferee传递 vector 时,gtest中的EXPECT_CALL未实现

c++ - 将模板类/结构的成员函数地址作为函数参数传递