Компиляция с помощью 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