c ++链接ubuntu下的boost库和cmake:未定义引用`boost :: iostreams :: zlib :: okay'

Sad*_*dik 3 c++ boost gzip cmake

我有问题boost::iostreams.我想只在一个函数中使用它们.唯一的问题是这一行:

in.push(boost::iostreams::gzip_decompressor());
Run Code Online (Sandbox Code Playgroud)

Boost用于程序的其他部分,没有任何问题或编译错误.但是,如果我使用这一行,我得到编译错误:

undefined reference to `boost::iostreams::zlib::okay'
Run Code Online (Sandbox Code Playgroud)

它包括这样:

#include <boost/iostreams/filter/gzip.hpp>
Run Code Online (Sandbox Code Playgroud)

的CMakeLists.txt

add_library(backend
    ... some files
)

find_package(Boost COMPONENTS system REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})
target_link_libraries(backend ${Boost_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)

Com*_*sMS 9

find_package对Boost的呼吁是不完整的.

您使用的所有来自Boost的非标头库都需要明确列出${Boost_LIBRARIES}才能正确填充.很容易忘记Boost的哪些部分只是标题,哪些不是,但是你遇到的链接器错误总是一个明确的暗示.

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

另请注意,您可能需要在Linux上引入其他依赖项以使压缩工作,如评论中所示.

  • 那天我将开始"获取"CMake的基本要素......将是美好的一天 (2认同)