Я пытаюсь создать свой проект C++ с помощью Boost :: iostreams и получаю следующую ошибку компоновщика:
undefined reference to `boost::iostreams::zlib::deflated'
Я проверил, что мой cmake смог найти библиотеки ускорения:
-- Boost version: 1.65.0
-- Found the following Boost libraries:
-- system
-- date_time
-- iostreams
-- regex
и Boost :: iostreams добавлен как зависимость к моему проекту.
Что могло быть причиной этого?
Я установил Boost 1.65 из исходников с помощью команды ./bootstrap.sh
. Когда я набираю ./b2
, я получаю уведомление об отсутствии zlib:
- zlib : no (cached)
- bzip2 : no (cached)
- lzma : no (cached)
- iconv (libc) : yes (cached)
- icu : no (cached)
- icu (lib64) : no (cached)
- native-atomic-int32-supported : yes (cached)
- native-syslog-supported : yes (cached)
- pthread-supports-robust-mutexes : yes (cached)
- compiler-supports-visibility : yes (cached)
- compiler-supports-ssse3 : yes (cached)
- compiler-supports-avx2 : yes (cached)
- gcc visibility : yes (cached)
- long double support : yes (cached)
Это причина ошибки компоновщика? Если да, как я могу создать ускорение с включенным zlib?
Первым шагом будет установка zlib-dev на ваш компьютер (т.е. библиотеки плюс необходимые файлы заголовков). Затем переустановите boost, и вы должен увидите zlib : yes
. Если это не сработает, спросите еще раз ...
Я перешел с Boost 1.66 на Boost 1.69 и получил ту же проблему. В Windows у меня нет проблем с компоновщиком, но в Linux есть. Я исправил это, включив в свой проект файлы zlib.cpp и gzip.cpp. На эти файлы есть ссылки в документации boost iostreams: boost.org/doc/libs/1_69_0/libs/iostreams/doc/installation.ht мл. Boost 1.69 - это первый раз в Linux, когда мне пришлось включить эти файлы в свой проект, и я включил их только в крайнем случае. Я еще не выяснил причину, и в документации говорится, что файлы не нужны под Linux.
Библиотека называется zlib, а не zlip.