首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >编译时对boost::system::system_category()的引用未定义

编译时对boost::system::system_category()的引用未定义
EN

Stack Overflow用户
提问于 2012-03-16 00:18:12
回答 8查看 153.5K关注 0票数 113

我正在尝试在Ubuntu11.10上编译一个使用Boost库的程序。我安装了来自Ubuntu Repository的1.46-dev Boost库,但在编译该程序时出现错误。

undefined reference to boost::system::system_category()

我做错了什么?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-03-16 00:32:53

您正在使用的boost库依赖于boost_system库。(并不是所有人都这样。)

假设您使用的是gcc,请尝试将-lboost_system添加到您的编译器命令行,以便链接到该库。

票数 165
EN

Stack Overflow用户

发布于 2015-06-17 04:38:30

与定义缺失符号(-lboost_system)的库链接是显而易见的解决方案,但在Boost.System的特殊情况下,原始设计中的错误功能使其不必要地使用boost::system::generic_category()boost::system::system_category()。使用标志-DBOOST_SYSTEM_NO_DEPRECATED进行编译会禁用该代码,并允许在不需要-lboost_system的情况下编译大量程序(如果显式使用库的某些特性,当然仍然需要该链接)。

从Boost 1.66和this commit开始,这种行为现在是默认的,所以希望越来越少的用户需要这个答案。

正如@AndrewMarshall所指出的,另一种选择是定义BOOST_ERROR_CODE_HEADER_ONLY,它启用代码的仅头版本。这是Boost的discouraged,因为它会破坏一些功能。然而,从1.69开始,header-only似乎有become the default,这使得这个问题变得过时了。

票数 71
EN

Stack Overflow用户

发布于 2018-05-03 12:01:55

对于那些不需要整个shebang的人来说,另一个解决方法是:使用开关

-DBOOST_ERROR_CODE_HEADER_ONLY

如果你使用CMake,它就是add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9723793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档