未定义对"boost::system::generic_category()"的引用?

Undefined reference to 'boost::system::generic_category()'?

本文关键字:引用 category generic boost system 未定义      更新时间:2023-10-16

我似乎看不到显而易见的东西。我想在我的项目中使用一些Boost库功能,并且知道我突然出现了这些漂亮的错误:

链接CXX可执行文件ATFORCMakeFiles/ATFOR.dir/stdafx.cc.o:在函数__static_initialization_and_destruction_0(int, int)': stdafx.cc:(.text+0x3c): undefined reference to boost::system::generic_category()中'stdafx.cc:(.text+0x48):未定义对boost::system::generic_category()' stdafx.cc:(.text+0x54): undefined reference to boost::system::system_category()的引用'CMakeFiles/ATFOR.dir/Main.cc.o:在函数__static_initialization_and_destruction_0(int, int)': Main.cc:(.text+0x29d): undefined reference to中boost::system::generic_category()'Main.cc:(.text+0x2a9):未定义对boost::system::generic_category()' Main.cc:(.text+0x2b5): undefined reference to boost::system::system_category()的引用'collect2:错误:ld返回1退出状态

在这里您可以找到我的CMakeLists.txt、headers和main:http://pastie.org/8231509
正如你所看到的,我尝试了很多CMakeLists,我很确定我已经拥有了项目所需的所有标题。无论如何,我以前从未犯过这样的错误,我真的很感激任何关于这里错误的建议/解决方案,因为我现在没有任何想法了。提前Thx。

必须显式添加系统库,才能将其链接到程序中

find_package(Boost REQUIRED COMPONENTS system)
#                                      ^^^^^^ this :)

对于其他单独构建的Boost库(regex、thread等)也必须这样做(请参阅此处)。

链接阶段中缺少"system"lib。我的配置如下,它修复了错误:

find_package(Boost 1.55.0 REQUIRED COMPONENTS system filesystem)
include_directories(... ${Boost_INCLUDE_DIRS})
link_directories(... ${Boost_LIBRARY_DIRS})
target_link_libraries(... ${Boost_LIBRARIES})

请注意,仅使用

find_package(Boost 1.55.0 REQUIRED)

不起作用,因为届时${Boost_LIBRARIES}将不可用。

好的,对于那些感兴趣的人来说,Mark Garcia的回答是一个很好的选择,但这里更重要的是,你需要明确地将你想要的库从像这样的boost链接起来

TARGET_LINK_LIBRARY(ATFOR${OpenCV_LBS}curl${Boost_SYSTEM_LIBRARY}${Boost_FILESYSTEM_LIBRARY})

我尝试并阅读过的所有其他选择都对我不起作用,不知道为什么,但我希望这能帮助到别人。

检查您的boost库是否具有正确的内部版本(gccmsvc…)。当我尝试将使用mingw的项目与为msvc构建的库链接时,我遇到了这个错误。如果不同,请尝试为您在项目中使用的平台构建它。

第一次使用Boost时,我使用默认参数构建了它,从而为msvc构建了库,尽管我的项目使用的是mingw。然而,CMake确实找到了头和库,一切似乎都很好,直到我开始使用库功能和编译,这导致了OP提到的错误。

将boost重建为toolset=gcc解决了这个问题(我使用的是Windows,CMake+MinGW)。