Я пытаюсь написать функцию, которая сжимает буфер данных и записывает его в файл, но у меня возникают проблемы с правильным построением.Сам код довольно прост:
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, все в порядке.
I в настоящее времяполучить поддержку через MacPorts, и у меня версия 1.71.(Я обновил свои порты и запустил sudo port install boost
несколько часов назад.) Запуск nm
на моей копии libboost_iostreams-mt.dylib показывает символы, связанные со многими другими алгоритмами сжатия, которые предлагает Boost.Iostreams, но символы, связанные с LZMA,нигде не найти. Что я могу сделать, чтобы получить библиотеку с нужными символами, которые мне нужны?
(Технически, мне НЕ НУЖНО использовать LZMA для моих целей здесь, и я, вероятно, мог бы также обойтиэто путем извлечения lzma.cpp из здесь и компиляции его со всем остальным, но мне все еще любопытно, каким будет общее исправление.)
Редактировать 1:
В ответ на комментарий nm, я строю это как инструмент командной строки через XCode для файла .xcconfig ниже, так что моя точная команда сборки - это то, что Xcode выплевывает.
HEADER_SEARCH_PATHS = $(inherited) /opt/local/include/
LIBRARY_SEARCH_PATHS = $(inherited) /opt/local/lib/
OTHER_LDFLAGS = $(inherited) -lboost_iostreams-mt -lboost_system-mt