CMake:对Boost库的未定义引用

dev*_*223 2 c++ boost cmake

我通过这个添加了增强:

set(Boost_USE_STATIC_LIBS        ON) 
set(Boost_USE_MULTITHREADED      ON)
set(Boost_USE_STATIC_RUNTIME    OFF)
find_package(Boost REQUIRED)
include_directories(${Boost_INCLUDE_DIR})

project(APP C CXX)
add_executable(APP src.cpp)
target_link_libraries(APP ${Boost_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)

当我编译源代码时,我得到:

demo.cpp:(.text+0x3d3): undefined reference to `boost::system::generic_category()'
Run Code Online (Sandbox Code Playgroud)

我检查了拼写(Boost_LIBRARIES与BOOST_LIBRARIES),但是还可以。

我在Fedora中使用boost-devel软件包安装了boost。

was*_*ful 5

看在源代码Boost_LIBRARIES根据传递到组件列表填充find_package。尝试:

find_package(Boost REQUIRED COMPONENTS system)
Run Code Online (Sandbox Code Playgroud)

您还应该使用导入的目标:

set(Boost_USE_STATIC_LIBS        ON)
set(Boost_USE_MULTITHREADED      ON)
set(Boost_USE_STATIC_RUNTIME    OFF)
find_package(Boost REQUIRED COMPONENTS system)

# the call to include_directories is now useless:
# the Boost::system imported target used below
# embeds the include directories

project(APP C CXX)
add_executable(APP src.cpp)
target_link_libraries(APP Boost::system)
Run Code Online (Sandbox Code Playgroud)

  • 仅适用于其他人:链接语法`Boost :: <component>`会自动将include目录添加到目标。这就是为什么`include_directories`在这里“无用”的原因 (3认同)