undefined reference to `boost::system::generic_category()' 首先,在之前进行编译的时候发现了这个错误,才想到自己没有在CMakeLists.txt里面添加Boost的链接库。在骂自己白痴之后,在按照cmake的官方文档 中所叙述的,添加了如下的cmake字段
1 2 3 4 5 6 7 8 9 10 find_package (Boost REQUIRED)message (STATUS "Boost status:" )message (STATUS " version: ${Boost_VERSION} ${Boost_LIB_VERSION}" )message (STATUS " include path: ${Boost_INCLUDE_DIRS}" )message (STATUS " LIBS: ${Boost_LIBRARIES}" )message (STATUS " LIBS DIR ${Boost_LIBRARY_DIRS}" )include_directories (${Boost_INCLUDE_DIRS} )target_link_libraries (learnTriangulation ${Boost_LIBRARIES} )
自己心里想的就是,这不就和OpenCV一个样子么,然后我就编译了,结果就开始报错
1 2 3 4 5 [build] CMakeFiles/learnTriangulation.dir/main.cpp.o: In function `__static_initialization_and_destruction_0(int, int)': [build] main.cpp:(.text+0 x128b): undefined reference to `boost::system::generic_category()' [build] main.cpp:(.text+0 x1297): undefined reference to `boost::system::generic_category()' [build] main.cpp:(.text+0 x12a3): undefined reference to `boost::system::system_category()' [build] collect2: error: ld returned 1 exit status
???
我不是明明就添加进去了吗??
然后我又重新cmake config了一下,才发现,?,为啥${Boost_LIBRARIES}是空的?
于是我加了一个小判断
1 2 3 4 5 6 7 if (NOT Boost_FOUND) message ("not found BOOST" ) endif () if (NOT Boost_LIBRARIES_FOUND) message ("not found boost lib" ) endif ()
然后遇到了迷惑的输出
1 2 3 4 5 6 [cmake] Boost status: [cmake] version: 105800 1 _58 [cmake] include path: /usr/include [cmake] LIBS: [cmake] LIBS DIR /usr/lib [cmake] not found boost lib
我自然就觉得肯定是我没找到这个库所以才会产生之前的报错。尝试使用各种方法无果之后,我看到了这一条
以及里面引用的这一条 ,按照说明添加上了这句话
1 add_definitions (-DBOOST_ERROR_CODE_HEADER_ONLY)
然后居然真的就build通过了 = =
先把问题记录在这,之后在康康能不能给个解释
2019.12.11 更新
在调研了之后在网上找到如下两个帖子,分别阐述了这个问题。其中一个 解释为是boost本身的bug,另一个 解释是cmake查找不对。
在之前的链接 中找到,其实使用上面那个定义会有一定问题,在1.66版本之前的boost库都有这样的问题,所以在使用的过程中可以用这个进行代替
1 add_definitions (-DBOOST_SYSTEM_NO_DEPRECATED)
在实际进行这样操作之后,在build的过程中仍然出现了一个问题
1 2 3 [build] [100%] Linking CXX executable learnboost [build] CMakeFiles/learnboost.dir/main.cpp.o: In function `boost::filesystem::detail::dir_itr_imp::~dir_itr_imp()': [build] /usr/include/boost/filesystem/operations.hpp:775: undefined reference to `boost::filesystem::detail::dir_itr_close(void*&, void*&)'
又一次说我没有增加filesystem的引用。。参考这篇文章 之后也没有太大用处.。