2011-02-08 24 views
11

我在Windows 7編譯具有的bjam升壓編譯提升(64位,應該是無關的)與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

我花了我一段時間才能使用zlib支持來正確構建Boost。我在博客上發帖here

總結起來,我遇到的問題是,在某些時候zlib不再包含gzio.c源文件。 Boost構建系統(jamfile.v2)的jamfile有一個引起gzio模塊失敗的引用。解決方案是在構建之前刪除該參考。

我不確定這個答案是否相關,除非您正在嘗試構建舊版本的Boost。我相信在更新版本的Boost中已經修復了最初的構建問題。

+0

與腳本參數嘗試過,但仍然沒有運氣。只有更多的iostream版本被編譯,但沒有zlib靜態圖書館 – cppanda 2011-02-08 20:46:24

+3

雖然這可能在理論上回答這個問題,[這將是更可取的](http://meta.stackexchange.com/q/8259)包括答案的基本部分這裏,並提供鏈接供參考。 – 2014-03-05 02:33:15

14

我做管理使用這個選項構建他們
-sZLIB_SOURCE =「C:\的zlib 1.2.5」
注有-s和路徑周圍的報價後沒有空間。

+5

只是要說清楚:在路徑中也不能有空格。這非常重要,當然完全沒有記錄。 – user673679 2013-04-11 19:12:12

+0

@ user673679花了兩個小時建造它,因爲我在路徑中有空間。我討厭助推文檔。感謝您發佈此提示。 – theV0ID 2014-02-25 12:58:58

3

我有同樣的問題(Windows 7 Visual Studio),我相信這個問題不在你如何建立提升。

1)作爲ecotax,在-s 之後不應有空格。2)運行bjam時,添加標誌--debug-configuration。如果輸出看不到錯誤,它打印出像

通知:輸入輸出流:使用預構建的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

對於球員,誰編制,使用預置的「ZLIB」。 這些步驟需要完成:

  • 下載,打造 'zlib的'
  • 運行b2.exe --with-輸入輸出流-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文件的路徑。
  • 它現在應該編譯和鏈接。
-1

set ZLIB_SOURCE="c:\zlib"

set ZLIB_INCLUDE="c:\zlib"

.\b2

.\bjam不會建,但.\b2將生成庫:■tage/libboost_zlib-vc100-mt-gd-1_44.lib