c + +升压:未定义参考,以提高系统:: :: generic_category()(C++ Bo

2019-06-21 05:31发布

我想包括Boost在我的项目库,并已面临着同样的问题。 我在Ubuntu 12.10使用的代码块IDE,并试图安装手动读取来自现场的指令库,但渐渐的错误与头以及待内置之前使用的库。

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

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

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

编译器:GCC
程序代码:只有试过计有上述文件系统operations.hpp文件。

从代码块生成日志:

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

Answer 1:

你应该在链接libboost_system库。 我不知道有关的代码块,但你的平台上g ++命令行选项会

-lboost_system



Answer 2:

根据增压版本libboost-系统自带的-mt后缀应该表明多线程能力的库。

所以,如果-lboost_system不能被链接器发现尝试-lboost_system-mt



Answer 3:

这是一个连接问题。 包括静态库路径到您的项目。

对于Qt Creator中打开该项目文件.pro并添加下面一行:

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

在我的情况的Ubuntu x86_64的:

LIBS += -L/usr/lib/x86_64-linux-gnu -lboost_system

对于代码块,打开Settings->Compiler...->Linker设置标签,并添加:

boost_system

该链接库文本组件,然后按OK按钮。



Answer 4:

我搜索了一个解决方案,以及,并没有遇到我的答案来解决的错误,直到我发现“ViRuSTriNiTy”的回答了这个主题: 未定义的引用“的boost ::系统:: generic_category()”?

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

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})


Answer 5:

上建立一个简单的升压例如,解决i之后从-std = C ++ 14 -STD = C ++ 11改变了G ++编译器标志同样的问题。

而且我注意到,这是一个C ++ 11例...



Answer 6:

这个答案使用Boost和cmake的时候实际上帮助。

添加add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)为cmake的文件。

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

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()


Answer 7:

你可能会遇到的另一个问题。 在Linux Mint的安装上去以后,我有同样的问题。 链接-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

欲了解更多信息,请参见该问题。



Answer 8:

我有同样的问题,还可以使用Linux Mint的(如nuduoz)。 我在我的情况下,问题得到解决后,我加入boost_systemGCC C++ Linker->Libraries



Answer 9:

尝试

g++ -c main.cpp && g++ main.o /usr/lib/x86_64-linux-gnu/libboost_system.so && ./a.out 

/usr/lib/x86_64-linux-gnu/是升压库的位置

使用find /usr/ -name '*boost*.so'找到Boost库位置



Answer 10:

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

debian下完美。 (升压C ++用apt-get的安装库)。



Answer 11:

伊尔库没有安装,你应该给Boost库文件夹:

例:

克++ -L / usr / lib中/ x86_64的-Linux的GNU -lboost_system -lboost_filesystem prog.cpp -o PROG



Answer 12:

测试上述提出的解决方案之后,我发现只有这几行会工作的。

我使用Ubuntu 16.04。

cmake_minimum_required(VERSION 3.13)
项目(myProject的)

集(CMAKE_CXX_STANDARD 11)
add_executable(myProject的main.cpp中)

find_package(升压1.58.0所需组件系统文件系统)
target_link_libraries(myProject的$ {} Boost_LIBRARIES)



文章来源: C++ Boost: undefined reference to boost::system::generic_category()