7

似乎我无法看到明显的东西。我想为我的项目使用一些 Boost 库功能,并且知道我突然遇到了这些不错的错误:

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

在这里你可以找到我的 CMakeLists.txt、标题和主文件:http: //pastie.org/8231509
正如你所看到的,我尝试了很多使用 CMakeLists 的方法,并且我很确定我拥有项目所需的所有标题。无论如何,我以前从来没有遇到过这样的错误,我真的很感谢任何关于这里出了什么问题的建议/解决方案,因为我现在没有任何想法。提前谢谢。

4

4 回答 4

15

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

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

对于其他单独构建的 Boost 库(正则表达式、线程等)也必须这样做(参见此处)。

于 2013-08-13T03:52:19.697 回答
14

链接阶段缺少“系统”库。我的配置如下,它修复了错误:

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}那时将不可用。

于 2014-12-29T22:09:18.103 回答
7

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

TARGET_LINK_LIBRARIES(ATFOR ${OpenCV_LIBS} curl ${Boost_SYSTEM_LIBRARY} ${Boost_FILESYSTEM_LIBRARY})

我尝试和阅读的所有其他选项都对我不起作用,不知道为什么,但我希望这对某人有所帮助。

于 2013-08-16T02:52:34.653 回答
3

检查您的 boost 库是否具有正确的构建 ( gcc, msvc...)。当我尝试使用mingwmsvc. 如果不同,请尝试为您在项目中使用的平台构建它。

我第一次使用 Boost 时,我使用默认参数构建了它,从而生成了为 构建的库msvc,即使我正在mingw为我的项目使用。然而,CMake 确实找到了头文件和库,并且在我开始使用库功能和编译之前一切似乎都很好,这导致了 OP 提到的错误。

重建提升以toolset=gcc解决它(我使用的是 Windows,CMake + MinGW)。

于 2016-12-14T15:39:57.240 回答