我在使用 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/