2011-02-08 3 views
11

Я составителя импульс с bjam под Windows 7 (64bit-должен быть не имеет значения)Компиляция подталкивание с Zlib

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 отсутствует.

Я компилирую что-то не так?

когда я попробуйте запустить свой проект, который работал хорошо с усиливающими самостоятельно скомпилированных библиотек/повышающих резьбовыми я получаю следующее сообщение об ошибке, когда я включаю импульс ZLIB материал

6>LINK : fatal error LNK1104: cannot open file 'libboost_zlib-vc100-mt-gd-1_44.lib' 

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

ответ

6

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

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

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

+0

пробовал с вашими параметрами скриптов, но до сих пор не повезло. только больше версий iostream компилируются, но нет статических библиотек zlib. – cppanda

+3

Хотя это теоретически может ответить на вопрос, [было бы предпочтительнее] (http://meta.stackexchange.com/q/8259) включить основные части ответа здесь, и укажите ссылку для справки. –

14

мне удалось построить их с помощью опции
-sZLIB_SOURCE = «C: \ Zlib-1.2.5»
Примечания нет пространства после -s и кавычек вокруг пути.

+5

Просто, чтобы прояснить: у вас также не может быть пробелов на пути. Это очень важно и, конечно, полностью недокументировано. – user673679

+0

@ user673679 Мне потребовалось два часа, чтобы построить его, потому что у меня были пробелы на пути. Ненавижу документацию о повышении. Спасибо, что разместили этот совет. – theV0ID

+1

о, да, это сработало !! – codekiddy

3

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

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 и сообщает об ошибке ссылки.

Что он работал для меня (я основал прибегая к помощи), чтобы добавить к определениям препроцессора к Флагу

BOOST_IOSTREAMS_NO_LIB

+1

Это работает для меня, но после определения определений препроцессора я получил эти ошибки. ошибка LNK2001: неразрешенный внешний символ «int const boost :: iostreams :: zlib :: default_compression». Есть ли у вас какие-либо идеи? –

+0

Это означает, что bjam не нашел путь к zlib и iostreams был построен без поддержки zlib. Вы должны предоставить ZLIB_INCLUDE и ZLIB_LIBPATH для bjam с правильными путями с вашей версией zlib. –

1

Для парней, которые компилирование, используя уже настроенный «Zlib». Эти шаги необходимо сделать:

  • Скачать и построить '' Zlib
  • Run 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

Это сработает, но я чувствую, что правильное решение заключается в следующем. Сначала сделайте 'b2.exe --with-iostreams -s ZLIB_INCLUDE = <путь к zlib> [другие параметры]'. I.e., опускают переключатели ZLIB_BINARY и ZLIB_LIBPATH, поскольку они игнорируются. Затем просто свяжите свой проект с библиотеками zlib вручную. Однако я слишком ленив, чтобы расследовать это правильно :) –

-1

set ZLIB_SOURCE="c:\zlib"

set ZLIB_INCLUDE="c:\zlib"

.\b2

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

Смежные вопросы