我正在尝试编写一个压缩数据缓冲区并将其写入文件的函数,但是我无法使其正确构建。代码本身非常简单:
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);
}
但是,当我尝试构建它时,出现了很多链接错误:
我已经链接到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