Компиляция с помощью zlib
Я компилирую boost с bjam под Windows 7 (64 бит - должен быть неактуальным)
D:\development\boost\boost_1_44\libs\iostreams\build>bjam stage ^
--toolset=msvc-10.0 link=static ^
--build-type=complete ^
-s ZLIB_SOURCE=C:\zlib125-dll ^
-s ZLIB_LIBPATH=C:\zlib125-dll\lib ^
-s ZLIB_INCLUDE=C:\zlib125-dll\include ^
-s ZLIB_BINARY=C:\zlib125-dll
Но я получаю только
stage/libboost_iostreams-vc100-mt-gd-1_44.lib
bin.v2/libs/iostreams/build/msvc-10.0/debug/threading-multi/boost_iostreams-vc100-mt-gd-1_44.dll
bin.v2/libs/iostreams/build/msvc-10.0/debug/threading-multi/boost_iostreams-vc100-mt-gd-1_44.lib
bin.v2/libs/iostreams/build/zlib/msvc-10.0/debug/threading-multi/boost_zlib-vc100-mt-gd-1_44.dll
bin.v2/libs/iostreams/build/zlib/msvc-10.0/debug/threading-multi/boost_zlib-vc100-mt-gd-1_44.lib
но stage/libboost_zlib-vc100-mt-gd-1_44.lib
отсутствует.
Я компилирую что-то не так?
когда я пытаюсь запустить проект, который хорошо работал с boost и самокомпилированными библиотеками boost/thread, я получаю следующую ошибку, когда включаю материал boost zlib
6>LINK : fatal error LNK1104: cannot open file 'libboost_zlib-vc100-mt-gd-1_44.lib'
Кто-нибудь знает, что я делаю неправильно?
Ответы
Ответ 1
Мне потребовалось некоторое время, чтобы получить Boost для правильной сборки с поддержкой zlib. Я писал об этом здесь.
Подводя итог, проблема, с которой я столкнулся, заключалась в том, что в какой-то момент zlib больше не включал исходный файл gzio.c
. В файле jamfile для системы сборки Boost (jamfile.v2) была ссылка на модуль gzio, который вызвал сбой. Решение заключалось в том, чтобы удалить эту ссылку перед сборкой.
Я не уверен, что этот ответ больше подходит, если вы не пытаетесь создать старую версию Boost. Я считаю, что исходная проблема сборки была исправлена в более поздних версиях Boost.
Ответ 2
Мне удалось создать их, используя опцию
-sZLIB_SOURCE = "C:\zlib-1.2.5"
Обратите внимание, что после -s и кавычек вокруг пути нет пробела.
Ответ 3
У меня была такая же проблема (Windows 7 Visual Studio), и я считаю, что проблема заключается не в том, как вы наращиваете форсирование.
1) В качестве ecotax не должно быть пробела после -s
2) При запуске bjam добавьте флаг -debug-configuration. Если в выводе вы не видите ошибок и печатает что-то вроде
извещение: iostreams: использование предварительно созданного zlib
то он нашел вашу zlib-копию, что хорошо.
3) Обратите внимание, что библиотека libboost_zlib-vc100-mt-gd-1_44.lib не должна создаваться.
4) Когда вы компилируете свое приложение в Visual Studio, кажется, что автоматическая привязка Boost.Iostreams по-прежнему хочет libboost_zlib-vc100-mt-gd-1_44.lib и сообщает о ошибке ссылки.
То, что это сработало для меня (я основал googling), заключалось в том, чтобы добавить в определения препроцессора флаг
BOOST_IOSTREAMS_NO_LIB
Ответ 4
Для парней, которые компилируют, используя prebuilt 'zlib'.
Эти шаги необходимо выполнить:
- Загрузите и создайте 'zlib'
- Запустить b2.exe --with-iostreams -s ZLIB_BINARY = zlib -s ZLIB_INCLUDE = C:/Sys/zlib-1.2.7/Include -s ZLIB_LIBPATH = C:/Sys/zlib-1.2.7/Lib release
Обновите пути к локальной папке zlib. Таким образом, Boost будет внедрять в libboost_iostreams файлы gzip.cpp, zlib.cpp. Никакой libboost_zlib не будет создан.
- В исходном файле добавьте эти строки (где-то в stdafx.h, прежде чем включать заголовки Boost.Iostream):
-
#ifdef _DEBUG
#define BOOST_ZLIB_BINARY zlibd
#else
#define BOOST_ZLIB_BINARY zlib
#endif
Это говорит о том, что вы не хотите ссылаться на libboost_zlib, но вместо этого вы предоставляете предварительно скомпилированную библиотеку zlib.
- В настройках проекта укажите путь к файлу zlib.lib.
- Теперь он должен скомпилировать и связать.
Ответ 5
set ZLIB_SOURCE="c:\zlib"
set ZLIB_INCLUDE="c:\zlib"
.\b2
.\bjam
не будет создан, но .\b2
построит библиотеку: s tage/libboost_zlib-vc100-mt-gd-1_44.lib