VC++2010下編譯STLport,Boost 最近在想向Boost轉(zhuǎn)移,努力掌握Boost代碼的過程中, STLport版本:5.2.1 Boost版本:1.4.6.1 (1.4.7.0也OK) 編譯器Visual Studio 2010 STLPort的編譯,選擇Microsoft Visual Studio 20010下面的Visual Studio Tools下面的命令行環(huán)境編譯工具,Visual Studio Command Prompt(2010)。 進(jìn)入STLport目錄,運行
但編譯會出現(xiàn)錯誤,
估計是STLport還沒有支持2010的問題導(dǎo)致的,檢查了以代碼,和google了一下問題,將_cstdlib.h(158)代碼修正為,
注意_STLP_MSVC 和 _MSC_VER 是一個東東,就是VC的版本號,
STLPort編譯很快就完成了,現(xiàn)在的機(jī)器搞定這個庫已經(jīng)是小意思了。默認(rèn)應(yīng)該有2個STLport版本,使用動態(tài)運行史庫的動態(tài)庫版本,使用靜態(tài)運行時庫的靜態(tài)庫版本。同時文件名稱包含stld的版本是調(diào)試模式版本,在你使用宏_STLP_DEBUG生效。 STLport會自動進(jìn)行鏈接,而且是根據(jù)你工程選擇的是使用動態(tài)runtime library還是靜態(tài)runtime library進(jìn)行控制,決定讓你使用靜態(tài)庫還是動態(tài)庫,而你如果希望你的工程使用動態(tài)runtime library,同時鏈接STLport的靜態(tài)庫就必須用到交叉編譯的庫,編譯使用在host.h文件中_STLP_USE_STATIC_LIB的宏,同時在配置時使用參數(shù)configure.bat msvc9 --with-dynamic-rtl。詳細(xì)見下表。
注意如果你需要動態(tài)運行時庫的靜態(tài)庫版本(真繞口),先編譯普通版本configure.bat msvc9,在nmake clean install 編譯,然后在改變host.h文件,再增加#define _STLP_USE_DYNAMIC_LIB(打開注釋),然后再configure.bat msvc9 --with-dynamic-rtl,再編譯。為啥要這樣?因為STLport的編譯腳本非要拷貝先拷貝動態(tài)庫版本……,這個錯誤讓我在編譯VS2012的版本的時候折騰了1天。特此說明紀(jì)念。
如果你希望在你的代碼里面優(yōu)先使用STLport的代碼,而不是微軟的默認(rèn)STL實現(xiàn),你要調(diào)整一下設(shè)置,VC2010的目錄設(shè)置發(fā)生了很大的調(diào)整。以前的版本設(shè)置路徑都在菜單tools\options下VC++ Directory下面進(jìn)行調(diào)整,方便快捷,VS2010做了一個很讓人不爽的改動設(shè)計,你必須先打開一個工程,打開菜單view\property Manager,選擇工程,選工程下DEBUG|WIN32和RELEASE|WIN32下面的Microsoft.Cpp.Win32.user,注意這兩層菜單都可以打開選項界面,但是一個是工程的,一個是全局的(一定要選擇Microsoft.Cpp.Win32.user這層),我經(jīng)常搞混,然后一頭霧水。 然后再進(jìn)行目錄調(diào)整,注意要去掉繼承選項,然后將STLPort的目錄要放到所有目錄前面,讓回將默認(rèn)的一條條輸入到其后面去(對于繼承來的無法調(diào)整目錄的先后順序),比原來麻煩不少。據(jù)說這個改動是為了VS2010測試版時有人希望對不同的用戶提供不同的Libaray管理,我靠他先人板板,程序員有幾個人和他人共用PC的,而且還要編程目錄不一致。 BOOST的編譯就更加痛苦一些了。首先我的4核機(jī)器上要編譯幾個小時才能編譯完成。大家要有點耐心。 當(dāng)然如果你的要求不高,你可以選擇一個簡單的方法,獲取BOOST已經(jīng)編譯好的庫,liangfeng推薦了一個網(wǎng)站給我,www. 。上面會提供各種版本VS版本,各個版本號的BOOST庫供你下載,而且都是全自動化的,非常方便。如下圖: 可以看出,BOOSTPro提供了VC2003,VC2005,VC2008,VC2010的,多線程動態(tài)runtime library動態(tài)庫版本,多線程動態(tài)runtime library靜態(tài)庫版本,多線程靜態(tài)runtime library靜態(tài)庫版本(每個都10多M),單線程靜態(tài)runtime library靜態(tài)庫版本。注意你要是全部下載的化,有好幾個G的文件,下載的過程也要有點耐心。 當(dāng)然全自動化的結(jié)果是由代價的,一是下載給你的庫沒有提供pdb文件,如果你想調(diào)試boost庫的代碼,發(fā)現(xiàn)問題,這招就不要用了。二是,他提供的下載源代碼文件里面只有頭文件,三是,如果你想用STLport+BOOST(STLport作為底層庫,而不是使用微軟的實現(xiàn))的方式,BOOSTPro網(wǎng)站沒有提供這種庫給你下載。四是,目前他沒有64位的版本。 我因為想用STLPort替代現(xiàn)有的庫實現(xiàn),我也要選擇自己進(jìn)行編譯。 要說明的是BOOST庫目前的版本已經(jīng)很容易編譯了,而且會自動識別那些庫可以編譯,那些不能編譯了。仍然選擇Visual Studio Command Prompt(2010) 進(jìn)入boost的根目錄, cd E:\HaveFun\Boost\boost.1.46.1 bootstrap.bat bjam.exe就生產(chǎn)了。 Boost的build說明文檔如裹腳布一樣,又臭又長,如果你沒有耐心直接看bjam的幫助, bjam —-help 但倒霉的是這里面又沒有說明如果要用STLPort怎么幫,這個只有看幫助文檔。如果要用STLPort作為底層編譯BOOST,詳細(xì)見BOOST的說明,Chapter 33. Boost.Build V2 User Manual 中的Reference
翻譯過來就是如果你想希望默認(rèn)使用STLPort的庫,你要編輯project-config.jam 增加一行 using msvc ; using stlport : 5.2.1 : E:/HaveFun/STLport/STLport.5.2.1/stlport : E:/HaveFun/STLport/STLport.5.2.1/lib ; #注意路徑用/,或者\\ 說明一下編譯參數(shù)和屬性, threading=single,multi 當(dāng)然單線程版本你用的干嘛,不編譯還可以節(jié)約一般的時間。 link=shared,static 生成的庫是靜態(tài)還是動態(tài) runtime-link= shared,static,運行時庫使用動態(tài)還是靜態(tài)的。 stdlib=stlport 使用STLport --build-type=commplete,minimal commplete標(biāo)識所有的版本都編譯,minimal只編譯多線程的靜態(tài)庫版本。 --stagedir=./stage 指本地構(gòu)建的存放庫的目錄, --show-libraries 顯示所有需要編譯的庫,其實不多,天知道為什么要了那么大的空間。 --with-<lib> 單獨編譯你想編譯的庫 --without-<lib> 編譯所有的庫,除了你制定不編譯的以外。 然后就可以開始編譯了,注意路徑名稱
然后就是漫長的等待……,等待……等待……如果全部編譯,你至少可以用這個時間看完一部電影…… 1.46版本生成的靜態(tài)庫在stage\lib下,動態(tài)庫和相應(yīng)的鏈接庫在bin.v2下面。bin.v2下面,目錄一層又一層,建議你全部搜索了拷貝出來,放在一個目錄下(我一般喜歡把所有的庫放到一個目錄下面)。1.47版本好像全部放到stage目錄下了,省事不少。 Boost是根據(jù)每個庫生成對應(yīng)的.lib文件的,實在不明白為什么不合并成一個庫文件。 另外,BOOST也采用了幫助你自動鏈接的技術(shù),可以省卻你一些麻煩。BOOST庫的命名比STLPort還要更加眼花繚亂,后綴含義簡直是亂花漸欲迷人眼。比如libboost_serialization-vc100-mt-sgdp-1_49.lib。 前面是庫名稱,vc100表示編譯器,最后面是版本號。下面來解釋一下中間那些字符的含義:
注意BOOST DEBUG版本使用的是帶調(diào)試模式的STLPort,編譯你的代碼必須定義_STLP_DEBUG=1,這時候編譯器回去鏈接調(diào)試模式的STLport版本。 最近打算認(rèn)真學(xué)習(xí)一下Boost庫,準(zhǔn)備在日常工作中,用Boost替換自己常用的ACE庫作為跨平臺實現(xiàn)。大家耐心等待后續(xù)的文章。 【本文作者是fullsail(雁渡寒潭),本著自由的精神,你可以在無盈利的情況完整轉(zhuǎn)載此文檔,轉(zhuǎn)載時請附上BLOG鏈接:http://www.cnblogs.com/fullsail,否則每字一元不講價。對Baidu文庫加價一倍】 |
|