首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++ Boost:对boost::system::generic_category()的引用未定义

C++ Boost:对boost::system::generic_category()的引用未定义
EN

Stack Overflow用户
提问于 2012-11-20 13:24:52
回答 8查看 130.3K关注 0票数 98

我正在尝试将Boost库包含在我的项目中,并且一直面临着同样的问题。我在Ubuntu 12.10上使用Codeblocks,并尝试手动安装库,从网站读取说明,但在标题和待构建的使用前库中遇到错误。

然后我通过terminalby sudo apt-get install libboost-all-dev安装库。在此之后,在我的代码块程序中,我可以包含像#include <boost/regex.hpp>这样的头文件,但是当我尝试包含文件系统库( #include "boost/filesystem/operations.hpp" )的头文件时,我得到了以下错误:

代码语言:javascript
复制
/usr/include/boost/system/error_code.hpp|214|undefined reference to boost::system::generic_category()'|

我不确定如何解决这个错误(特别是在Linux上的Codeblock中)。我真的需要一些帮助。

编译: Gcc

程序代码:仅尝试包含上述文件系统operations.hpp文件。

从代码块构建日志:

代码语言:javascript
复制
Build started on: 20-11-2012 at 18:02.53
Build ended on: 20-11-2012 at 18:02.54
-------------- Build: Debug in libopenFrameworks ---------------
Target is up to date.
-------------- Build: Debug in reader1 ---------------
make -s -f Makefile Debug
linking i686 bin/reader1_debug linux
obj/i686Debug/src/testApp.o: In function `__static_initialization_and_destruction_0':
/usr/include/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:215: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:216: undefined reference to `boost::system::system_category()'
obj/i686Debug/src/main.o: In function `__static_initialization_and_destruction_0':
/usr/include/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:215: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:216: undefined reference to `boost::system::system_category()'
collect2: ld returned 1 exit status
make: *** [bin/reader1_debug] Error 1
Process terminated with status 2 (0 minutes, 1 seconds)
6 errors, 0 warnings
EN

回答 8

Stack Overflow用户

发布于 2013-09-02 16:07:24

根据boost版本的不同,libboost system会附带-mt后缀,它应该表示库的多线程功能。

因此,如果链接器找不到-lboost_system,请尝试使用-lboost_system-mt

票数 21
EN

Stack Overflow用户

发布于 2016-09-29 15:54:32

我也在寻找解决方案,但我遇到的答案都不能解决这个问题,直到我找到了这个帖子的答案"ViRuSTriNiTy“:Undefined reference to 'boost::system::generic_category()'?

根据这个答案,尝试将以下行添加到cmake文件中:

代码语言:javascript
复制
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})
票数 8
EN

Stack Overflow用户

发布于 2018-10-10 17:52:47

在使用Boost和cmake时,这个answer实际上很有帮助。

正在为cmake文件添加add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)

我的CMakeLists.txt看起来像这样:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.12)
project(proj)

set(CMAKE_CXX_STANDARD 17)


set(SHARED_DIR "${CMAKE_SOURCE_DIR}/../shared")

set(BOOST_LATEST_DIR            "${SHARED_DIR}/boost_1_68_0")
set(BOOST_LATEST_BIN_DIR        "${BOOST_LATEST_DIR}/stage/lib")
set(BOOST_LATEST_INCLUDE_DIR    "${BOOST_LATEST_DIR}/boost")
set(BOOST_SYSTEM                "${BOOST_LATEST_BIN_DIR}/libboost_system.so")
set(BOOST_FS                    "${BOOST_LATEST_BIN_DIR}/libboost_filesystem.so")
set(BOOST_THREAD                "${BOOST_LATEST_BIN_DIR}/libboost_thread.so")

set(HYRISE_SQL_PARSER_DIR           "${SHARED_DIR}/hyrise_sql_parser")
set(HYRISE_SQL_PARSER_BIN_DIR       "${HYRISE_SQL_PARSER_DIR}")
set(HYRISE_SQL_PARSER_INCLUDE_DIR   "${HYRISE_SQL_PARSER_DIR}/src")
set(HYRISE_SQLPARSER                "${HYRISE_SQL_PARSER_BIN_DIR}/libsqlparser.so")


include_directories(${CMAKE_SOURCE_DIR} ${BOOST_LATEST_INCLUDE_DIR} ${HYRISE_SQL_PARSER_INCLUDE_DIR})

set(BOOST_LIBRARYDIR "/usr/lib/x86_64-linux-gnu/")
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)

add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)

find_package(Boost 1.68.0 REQUIRED COMPONENTS system thread filesystem)

add_executable(proj main.cpp row/row.cpp row/row.h table/table.cpp table/table.h page/page.cpp page/page.h
        processor/processor.cpp processor/processor.h engine_instance.cpp engine_instance.h utils.h
        meta_command.h terminal/terminal.cpp terminal/terminal.h)


if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})
    target_link_libraries(proj PUBLIC Boost::system Boost::filesystem Boost::thread ${HYRISE_SQLPARSER})
endif()
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13467072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档