Компилирование форса с помощью zlib - PullRequest
13 голосов
/ 08 февраля 2011

Я компилирую 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'

Кто-нибудь знает, что я делаю не так?

Ответы [ 6 ]

15 голосов
/ 31 января 2012

Мне удалось построить их, используя опцию-sZLIB_SOURCE = "C: \ Zlib-1.2.5"Обратите внимание, что после -s и кавычек вокруг пути нет пробелов.

5 голосов
/ 08 февраля 2011

Мне потребовалось некоторое время, чтобы заставить Boost правильно строить с поддержкой zlib. Я писал об этом здесь .

Подводя итог, я столкнулся с проблемой, что в какой-то момент zlib больше не включал gzio.c исходный файл. В файле jamfile для системы сборки Boost (jamfile.v2) была ссылка на модуль gzio, который вызвал его сбой. Решением было удалить эту ссылку перед сборкой.

Я не уверен, что этот ответ более актуален, если только вы не пытаетесь собрать старую версию Boost. Я полагаю, что первоначальная проблема сборки была исправлена ​​в более поздних версиях Boost.

3 голосов
/ 19 сентября 2012

У меня была такая же проблема (Windows 7 Visual Studio), и я считаю, что проблема не в том, как вы создаете надстройку.

1) Как экотакс, после -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 и сообщает об ошибке соединения.

Для меня (я основал поиск в Google) это помогло добавить к определениям препроцессора флаг

BOOST_IOSTREAMS_NO_LIB

1 голос
/ 23 июля 2018

Я воспользовался советом из других ответов здесь, и вот что я сделал:

Извлечение zlib в C: \ zlib \ zlib-1.2.11.

Используйте CMake для настройки и генерации проекта MS Visual Studio 2017 и используйте MS Visual Studio 2017 для сборки проекта. Я построил его так, чтобы C: \ zlib \ zlib-1.2.11 теперь содержал (в дополнение к предыдущему содержимому) каталоги lib и include.

Извлечь Boost 1.67.0 в C: \ Boost \ boost_1_67_0.

(быть на диске C:)

cd \Boost\boost_1_67_0
bootstrap.bat
set ZLIB_SOURCE="C:\zlib\zlib-1.2.11"
set ZLIB_INCLUDE="C:\zlib\zlib-1.2.11\include"
set ZLIB_LIBPATH="C:\zlib\zlib-1.2.11\lib"

Следующая строка собрала libboost_iostreams и поместила файлы libboost_zlib в C: \ Boost \ boost_1_67_0 \ stage \ lib:

b2 --debug-configuration --with-iostreams -sZLIB_SOURCE="C:\zlib\zlib-1.2.11" -sZLIB_INCLUDE="C:\zlib\zlib-1.2.11\include" -sZLIB_LIBPATH="C:\zlib\zlib-1.2.11\lib"

Следующая строка построила остаток Boost:

b2 -sZLIB_SOURCE="C:\zlib\zlib-1.2.11" -sZLIB_INCLUDE="C:\zlib\zlib-1.2.11\include" -sZLIB_LIBPATH="C:\zlib\zlib-1.2.11\lib"

Не знаю, является ли это наиболее оптимальным способом сделать это, но он действительно собрал libboost_zlib lib файлы.

1 голос
/ 01 августа 2016

Для парней, которые компилируют, используя готовый '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.
  • Это должно скомпилировать и связать сейчас.
0 голосов
/ 20 января 2017

set ZLIB_SOURCE="c:\zlib"

set ZLIB_INCLUDE="c:\zlib"

.\b2

.\bjam не будет построен, но .\b2 создаст библиотеку: s tage/libboost_zlib-vc100-mt-gd-1_44.lib

...