Ошибка компоновщика при попытке использовать LZMA в boost :: iostreams от MacPorts - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь написать функцию, которая сжимает буфер данных и записывает его в файл, но у меня возникают проблемы с правильным построением.Сам код довольно прост:

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
...