尝试在MacPorts的boost :: iostreams中使用LZMA时出现链接器错误

时间:2019-09-24 04:54:14

标签: c++ boost macports boost-iostreams

我正在尝试编写一个压缩数据缓冲区并将其写入文件的函数,但是我无法使其正确构建。代码本身非常简单:

void writeToFile(std::string fileName, const char* buf, size_t bufSize) {
    boost::filesystem::ofstream outFile(fileName, std::ios::out | std::ios::binary | std::ios::trunc);

    boost::iostreams::filtering_streambuf<boost::iostreams::output> out;
    out.push(boost::iostreams::lzma_compressor());
    out.push(outFile);

    boost::iostreams::copy(boost::iostreams::basic_array_source<char>(buf, bufSize), out);
}

但是,当我尝试构建它时,出现了很多链接错误:

  • 未定义符号:boost :: iostreams :: lzma_error :: check(int)
  • 未定义符号:boost :: iostreams :: lzma :: stream_end
  • 未定义符号:boost :: iostreams :: lzma :: default_compression

我已经链接到libboost_iostreams-mt和libboost_system-mt,因为如果使用bzip2或zlib等效项,一切都可以构建。

我目前通过MacPorts获得了提升,并且我具有1.71版。 (我更新了端口,并在几个小时前运行了sudo port install boost。)在我的libboost_iostreams-mt.dylib副本上运行nm会显示与Boost.Iostreams提供的许多其他压缩算法有关的符号,但是LZMA相关符号无处可寻。 我该怎么做才能获得带有所需符号的图书馆?

(从技术上讲,我不需要在这里使用LZMA,我也可以通过从here中获取lzma.cpp并将其与其他所有内容一起编译来解决此问题,但是我仍然对总体解决方案感到好奇。)

编辑1:

为响应n.m.的评论,我正在针对下面的.xcconfig文件通过Xcode将其构建为命令行工具,因此我的确切构建命令就是Xcode吐出的内容。

HEADER_SEARCH_PATHS = $(inherited) /opt/local/include/
LIBRARY_SEARCH_PATHS = $(inherited) /opt/local/lib/

OTHER_LDFLAGS = $(inherited) -lboost_iostreams-mt -lboost_system-mt

0 个答案:

没有答案
相关问题