STLPort的編譯和安裝 (轉)

amyz發表於2007-08-14
STLPort的編譯和安裝 (轉)[@more@]

STLPort的編譯和 - 王猛 (to:HeartIcy@163.com">HeartIcy@163.com)

前言

STLPort是一套C++模板庫,BCB6整合的正是此庫的早期版本。雖然STLPort並沒有100%完整支援
ANSI標準的規定,但是從寶藍肯採用此模版庫作為標準配備可見其自有獨到一面!現在我談一下
我編譯以及使用此開發庫的感受。不過我要說明的是,我是一個C設計專家而不是C++,我的
體會或者說心得僅僅是如何在專案中使用並將其應用到專案中。

編譯

環境

STLPort支援多平臺下的常用,可是說是包羅永珍!在下編譯STLPort你要先注意三
點:1 修改vc98/bin下的vcvars32.bat ;2 不要試圖使用 PlatfoSDK ;3 準備好符號!
為什麼?請聽我慢慢道來。

關於第一點,你需要根據你的平臺修改,vcvars32.bat從命令列下進行編譯。當然,你可以參照
makefile文件自己製作工程在中編譯,不過STLPort本身沒這個檔案!

包含路徑在 set INCLUDE = 中追加STLPort目錄下的stlport目錄,例如:
set INCLUDE=F:STLportstlport;%MSir%ATLINCLUDE;%MSVCDir%INCLUDE;%MSVCDir%
MFCINCLUDE;%INCLUDE%

包含庫路徑在 set LIB= 中追加STLPort目錄下的lib目錄,例如:
set LIB=F:STLportlib;%MSVCDir%LIB;%MSVCDir%MFCLIB;%LIB%

好了,第一點完成了!

關於第二點,大家注意到了我並沒有包含進Platform SDK的過來,事實上我的機器中安裝有此更
新的年2月版(支援新特性!)。我堅持不包含進來的原因是,在Platform SDK中更新過
的部分檔案編譯STLPort時無法正常工作。也不奇怪,這會兒正忙著猛推來著!切忌不要用!

關於第三點,如果沒有除錯符號檔案在編譯DE版本的時候會給你一個Link錯誤提示 :( 不過,即
使沒有再一邊nmake仍然可以輸出檔案,不過這樣出來的檔案能不能正常工作我就不知道了!

當你完成了上述三步之後,你日後可以繼續用這個環境在命令列下編譯你的STLPort程式。

makefile檔案

在STLPort的src目錄下存放了眾多.mak檔案,這些檔案就是STLPort為其多平臺多編譯器支援所準備
的傑作。我們使用VC來編譯可以根據編譯器的版本選擇不同的.mak檔案:
VC.Net使用vc7.mak,VC5使用vc5.mak(STLPort官方測試支援),VC6的選擇就相對多了一點,有三
個檔案可以選擇,用NT系列的選擇vc6t.mak,用98之類的選擇vc6.mak,需要獲得unicode支援的就用
vc6-unicode.mak,vc6-unicode.mak是針對98編寫的,雖然NT可以直接套用但是我自己還是小小的修
改了一下:將!INCLUDE vc_common.mak 替換為!INCLUDE vc_commont.mak。其實你如果你懂得規則完
全可以根據自己的需要編寫一個.mak前端檔案出來,STLPort為了方便自行編寫makefile檔案的開發人
員提供了一個名為build-tempinc-xlc.mk的模版檔案。

用命令列在src目錄下,執行copy 你選擇的.mak makefile, 偷懶的在這個時候 nmake install就可
以連編譯到安裝一次解決!不過,還是多學點東西好,我繼續講我的。如果你在link它的DEBUG編譯時
出現了link錯誤,不要灰心你可以再執行一邊剛才的命令(強烈不推薦!)或者自定義編譯。

** 這一步你不copy直接 nmake -f xxx.mak 一樣可以。

自定義編譯

比如我討厭Debug版,所以我就直接編譯release。方法很簡單,如果要編譯一個靜態庫可以用:

nmake release_static

要編譯一個動態庫則用

nmake release_dynamic

注意了,自定義編譯沒有現成的install來用,要自己改makefile,太麻煩了。

安裝

如果你是自定義編譯那麼必須看一下這裡。
1 STLPort所產生的動態庫DLL複製到system32(NT)或者system(98),目錄下。
2 將stlport子目錄複製到vc的include目錄下。
3 將.lib .exp檔案複製到vc的lib目錄下。

如果你不打算刪除stlport的目錄第2、3步是可選的,因為vcvars32.bat已經做了定位。否則你
最好還是順便修改一下vcvars32.bat。

專案中的應用

1 無論怎樣stlport必須處於INCLUDE目錄的第一位。
2 動態庫編譯link stlport_vc6.lib 靜態link stlport_vc6_static.lib。
3 如果使用動態庫記得copystlport_????.dll到釋出的程式中,否則,嘿嘿!你知道的!

完畢?

透過電子,我可以為你提供有限的技術支援。因為我不是C++ Coder!謝謝閱讀
本文。

 


 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-956278/,如需轉載,請註明出處,否則將追究法律責任。

相關文章