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

时间:2013-08-13 03:41:58

标签: c++ boost cmake

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

  

链接CXX可执行文件ATFOR   CMakeFiles / 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,标题和主要内容:http://pastie.org/8231509
正如你所看到的,我尝试了很多玩CMakeLists,我很确定我有我的项目所需的所有标题。无论如何,我以前从来没有遇到过这样的错误,我真的很感激任何有关错误的建议/解决方案,因为我现在还没有任何想法。 Thx提前。

4 个答案:

答案 0 :(得分:15)

您必须明确添加系统库才能链接到您的程序

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

对于单独构建的其他Boost库(正则表达式,线程等)(see here)也必须这样做。

答案 1 :(得分:13)

"系统"链接阶段缺少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}当时无法使用。

答案 2 :(得分:7)

好的,对于那些感兴趣的人,马克加西亚的答案是一个很好的电话,但更重要的是你需要明确地链接你想要的libs像

  

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

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

答案 3 :(得分:2)

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

我第一次使用Boost时,我使用默认参数构建它,导致为msvc构建库,即使我在项目中使用mingw。 但是,在我开始使用库功能和编译之前,CMake确实找到了标题和库,一切似乎都没问题,这导致了OP提到的错误。

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