我正在尝试在Ubuntu11.10上编译一个使用Boost库的程序。我安装了来自Ubuntu Repository的1.46-dev Boost库,但在编译该程序时出现错误。
undefined reference to boost::system::system_category()
我做错了什么?
发布于 2012-03-16 00:32:53
您正在使用的boost库依赖于boost_system库。(并不是所有人都这样。)
假设您使用的是gcc,请尝试将-lboost_system
添加到您的编译器命令行,以便链接到该库。
发布于 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,这使得这个问题变得过时了。
发布于 2018-05-03 12:01:55
对于那些不需要整个shebang的人来说,另一个解决方法是:使用开关
-DBOOST_ERROR_CODE_HEADER_ONLY
。
如果你使用CMake,它就是add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)
。
https://stackoverflow.com/questions/9723793
复制相似问题