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

问题描述 投票:80回答:12

我试图在我的项目中包含Boost库,并且一直面临着同样的问题。我在使用Codeblocks IDE的Ubuntu 12.10上,尝试手动从站点读取指令来安装库,但是在使用头文件以及使用前构建的库时出现了错误。

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

/usr/include/boost/system/error_code.hpp|214|undefined reference to boost::system::generic_category()'|

我不知道如何解决此错误(特别是在Linux上的Codeblocks中)。我真的可以在这里使用一些帮助。

编译器:Gcc 程序代码:仅尝试包含上述文件系统qazxsw poi文件。

从Codeblocks构建日志:

operations.hpp
c++ linux boost codeblocks
12个回答
130
投票

你应该链接到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 库。我不确定代码块,但是你平台上的g ++命令行选项会是

-lboost_system


0
投票

g ++ -lboost_system -lboost_filesystem userentry.cpp -o userentry

在debian下工作得很好。 (使用apt-get安装c ++库)。


0
投票

如果未安装库,则应提供boost库文件夹:

例:

g ++ -l / usr / lib / x86_64-linux-gnu -lbost_systems -lbost_filesystems of prog


0
投票

在测试了上述提出的解决方案之后,我发现只有这几行可行。

我正在使用Ubuntu 16.04。

cmake_minimum_required(版本3.13) 项目(myProject的)

设置(CMAKE_CXX_STANDARD 11) add_executable(myProject main.cpp)

find_package(Boost 1.58.0 REQUIRED COMPONENTS系统文件系统) target_link_libraries(myProject $ {Boost_LIBRARIES})


20
投票

根据boost版本,libboost-system附带-mt后缀,该后缀应指示库多线程功能。

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


8
投票

这是一个链接器问题。将静态库路径包含到项目中。

对于Qt Creator,打开项目文件-lboost_system-mt并添加以下行:

.pro

在我的情况下Ubuntu x86_64:

LIBS += -L<path for boost libraries in the system> -lboost_system

对于Codeblocks,打开LIBS += -L/usr/lib/x86_64-linux-gnu -lboost_system 设置选项卡并添加:

Settings->Compiler...->Linker

到链接库文本小部件,然后按确定按钮。


7
投票

我也搜索了一个解决方案,我遇到的答案都没有解决错误,直到我找到了“ViRuSTriNiTy”给这个帖子的答案:boost_system

根据该答案,尝试将这些行添加到您的cmake文件中:

Undefined reference to 'boost::system::generic_category()'?

3
投票

构建一个简单的boost示例的问题相同,在我将g ++编译器标志从-std = c ++ 14更改为-std = c ++ 11之后解决了。

我注意到它是一个C ++ 11示例......


2
投票

这个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}) 实际上在使用Boost和cmake时有所帮助。

为cmake文件添加answer

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

add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)

1
投票

你可能会遇到另一个问题。在Linux Mint上安装Boost之后我遇到了同样的问题。链接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() -lboost_system没有奏效,因为图书馆有名称-lboost_system-mt

因此解决方案是创建到原始文件的符号链接。就我而言

libboost_system.so.1.54.0

有关更多信息,请参阅sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_system.so.1.54.0 /usr/lib/libboost_system.so 问题。


1
投票

我有同样的问题,也使用Linux Mint(作为nuduoz)。我将this添加到boost_system后解决了我的案例问题。


0
投票

尝试

GCC C++ Linker->Libraries

g++ -c main.cpp && g++ main.o /usr/lib/x86_64-linux-gnu/libboost_system.so && ./a.out 是boost库的位置

使用/usr/lib/x86_64-linux-gnu/查找boost库的位置

© www.soinside.com 2019 - 2024. All rights reserved.