链接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提前。
答案 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库是否具有正确的版本(gcc
,msvc
...)。当我尝试使用mingw
将项目与为msvc
构建的库链接时出现此错误。如果不同,请尝试为您在项目中使用的平台构建它。
我第一次使用Boost时,我使用默认参数构建它,导致为msvc
构建库,即使我在项目中使用mingw
。
但是,在我开始使用库功能和编译之前,CMake确实找到了标题和库,一切似乎都没问题,这导致了OP提到的错误。
重建对toolset=gcc
的提升解决了它(我使用的是Windows,CMake + MinGW)。