未定义对"boost::system::generic_category()"的引用?
Undefined reference to 'boost::system::generic_category()'?
我似乎看不到显而易见的东西。我想在我的项目中使用一些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库是否具有正确的内部版本(gcc
、msvc
…)。当我尝试将使用mingw
的项目与为msvc
构建的库链接时,我遇到了这个错误。如果不同,请尝试为您在项目中使用的平台构建它。
第一次使用Boost时,我使用默认参数构建了它,从而为msvc
构建了库,尽管我的项目使用的是mingw
。然而,CMake确实找到了头和库,一切似乎都很好,直到我开始使用库功能和编译,这导致了OP提到的错误。
将boost重建为toolset=gcc
解决了这个问题(我使用的是Windows,CMake+MinGW)。
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 强制转换为引用类型
- 引用一个已擦除类型(void*)的指针
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 具有默认值的引用获取函数
- 如何使用基类指针引用派生类成员
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 如何引用基类的派生类?