c++将ubuntu下的boost库与cmake : undefined reference to `boost::iostreams::zlib::okay' 链接

标签 c++ boost cmake gzip

我在使用 boost::iostreams 时遇到问题。我只想在一个函数中使用它们。 唯一的问题是这一行:

in.push(boost::iostreams::gzip_decompressor());

Boost在程序的其他部分使用没有任何问题,也没有编译错误。 但是,如果我使用这一行,则会出现编译错误:

undefined reference to `boost::iostreams::zlib::okay'

它是这样包含的:

#include <boost/iostreams/filter/gzip.hpp>

CMakeLists.txt

add_library(backend
    ... some files
)

find_package(Boost COMPONENTS system REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})
target_link_libraries(backend ${Boost_LIBRARIES})

最佳答案

您对 Boost 的 find_package 调用不完整。

您使用的来自 Boost 的所有非 header 库都需要明确列出,以便正确填充 ${Boost_LIBRARIES}。很容易忘记 Boost 的哪些部分是仅 header ,哪些不是,但是像您遇到的那样的链接器错误始终是一个明确的提示。

find_package(Boost REQUIRED COMPONENTS system iostreams)

另请注意,您可能必须在 Linux 上引入额外的依赖项才能使压缩工作,如 suggested in the comments .

关于c++将ubuntu下的boost库与cmake : undefined reference to `boost::iostreams::zlib::okay' 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24509382/

相关文章:

c++ - 在 C++ 中压缩多个文件

c++ - 属性树 : complete path and name

makefile - 配置 cmake 以显示更少的百分比指示器

c++ - 如何使用 boost::process::child 处理路径中的空格?

c++ - 有条件地迭代某些项目

c++ - 在 CMAKE 中正确设置 Visual Studio 链接器标志/SUBSYSTEM

c++ - cmake 无法在自定义位置或库存位置找到 boost

c++ - 指向抽象类的指针数组

c++ - 这个编译器构建语句是什么意思?

c++ - 如何禁用 TBB 的自动链接