VC6(SP6)+STLPort4.6.2安裝全攻略
最後更新:2018-12-04
來源:互聯網
上載者:User
首先,我對VC/c++幾乎沒有經驗,STL也是剛開始學。為了用 stlport,瞎忙呼了大半天,也是剛剛裝好。為了避免自己或者別人安裝stlport時再走彎路,特記錄下這段經曆。由於我很菜,即使安裝完畢,仍有 很多不明之處,所以下面的文檔如果有錯誤,請您批評指出。文中還有一些疑問,希望學深入之後自己能解答,也歡迎網友幫我解答。
step by step, Now:
1.安裝VC6,打補丁sp6
(http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp6/default.aspx)
2.推薦安裝一個visual assist for VC6,這是個好東東。它使得編輯環境更加好用。
(有個http://www.vcer.net/download.jsp?id=1042 http://www.vcer.net/upload/2004/04/1042.zip 不知道失效沒有)
3.到www.stlport.org下載STLPort。我下載的是stlport4.6.2
(http://www.stlport.org/archive/STLport-4.6.2.tar.gz)
4.未使用stlport之前,先看看VC的stl庫的表現。
作一個最簡單的工程,編一個cpp
#include <vector>
using namespace std;
int main()
{
vector<int> v;
v.push_back(0);
return 0;
}
這個程式編譯能通過,把滑鼠放到vector和push_back上,右鍵到其定義處(goto the Definition of ...),在彈出的視窗,(注意到這些定義中std是小寫字串)。選中一個進入定義檔案,可以看出引用的是..../VC98/Include/ VECTOR檔案。這個目錄下還有LIST等等,這是VC6內建的STL實現。據說比較爛,沒用過我不瞭解:)
但是下面這個程式就編譯不過了。
#include <vector>
#include <deque>
using namespace std;
int main()
{
const int arraySize = 7;
int ia[arraySize] = {0, 1, 2, 3, 4, 5, 6};
vector<int> v(ia, ia+arraySize);
//v.push_back(0);
deque<int> d(ia, ia+arraySize);
return 0;
}
原因應該是VC6的deque不支援這樣的構造吧。但是這個程式在用gcc的Dev-c++下編譯就沒有問題。
好了,儲存我們的工程,可以猜想,如果stlport安裝成功之後,應該是可以順利編譯的。
5.把下載的stlport壓縮包解壓,我假設解壓到C:/STLport(緊挨著C:/STLport的子目錄是stlport的src,doc,stlport等目錄)
6.編譯stlport
(1) 設定環境變數,使得環境變數PATH中包含C:/Program Files/Microsoft Visual Studio/VC98/Bin
(當然也可以不設定,如果你願意不厭其煩地打這個目錄名)
(2) 開啟一個dos視窗(運行cmd)
(3) 運行 ..../VC98/Bin中的VCVARS32.BAT:
/*****
a.修改..../VC98/Bin中的VCVARS32.BAT檔案,找到
set INCLUDE=%MSVCDir%/ATL/INCLUDE;%MSVCDir%/INCLUDE;%MSVCDir%/MFC/INCLUDE;%INCLUDE%
set LIB=%MSVCDir%/LIB;%MSVCDir%/MFC/LIB;%LIB%
這兩句,加上STLPort的路徑,修改成如下:
set INCLUDE=C:/STLport/stlport;%MSVCDir%/ATL/INCLUDE;%MSVCDir%/INCLUDE;%MSVCDir%/MFC/INCLUDE;%INCLUDE%
set LIB=C:/STLport/lib;%MSVCDir%/LIB;%MSVCDir%/MFC/LIB;%LIB%
(C:/STLport/lib目前還不存在,但不用著急,編譯完stlport就有了)
注意:第(3)-a步驟修改VCVARS32.BAT這個檔案的內容完全沒有必要,我是看某些文檔上這麼寫的,但後來試了幾次,改不改這個檔案都沒有關係!所以不改算了。(這步驟登出!)
****/
b.在dos視窗中運行..../VC98/Bin下這個檔案VCVARS32.BAT (必須!!!)
(4) 在同一個dos視窗中!進入C:/STLport/src目錄運行
nmake -f vc6.mak clean all
(問題,vc6還可以選擇支援unicode的vc6-unicode.mak檔案,但vc中unicode如何用,我還不瞭解:( )
編譯需要一點時間,完成之後,你可以選擇運行 nmake -f vc6.mak install。
注:install任務是可選的,看stlport的INSTALL文檔:
[quote]
"install" target works on most platforms.
On Win32, it does the following :
- copies STLport headers in "stlport" subdirectory of your compiler's INCLUDE directory;
- copies STLport .lib files in your compiler's LIB directory;
- copies STLport DLLs to Windows system directory so they can be found at runtime.
[/quote]
dums(stlport論壇上的高手)建議一般不要用nmake install,我也強烈建議不要運行這個nmake install!!!如果你想vc的stl和STLPort的stl共存,那麼這個install任務就更加不要執行!!!
(如果你還是要運行nmake install,並且運行有錯誤,則再運行一次VCVARS32.BAT先)
/**
問題:有個安裝文檔中寫到完成之後要修改C:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin/SYSINCL.DAT,我沒有試,怎麼修改?有什麼用?
**/
7.配置vc
進入VC,編譯前面那個有錯的cpp,發現還是有同樣的編譯錯誤。
(即使修改了VCVARS32.BAT,加上stlport的路徑,也沒有用!似乎這個檔案不能把include和lib加入。這也是我說為什麼不用修改VCVARS32.BAT的原因,不明白這個檔案在運行vc時的作用,請您指正:) )
點擊vc的tools-options-Directories,
選擇Include files,加入C:/STLPORT/STLPORT,並調到最前面
選擇Library files,加入C:/STLPORT/LIB,並調到最前面
編譯工程,呵呵,應該通過了吧。同樣的,為了驗證我們用的是stlport的STL庫,把滑鼠放到程式中vector和push_back上,右鍵到其定 義處(goto the Definition of ...),在彈出的視窗,(注意到這些定義中STL是大寫的字串了)。選中一個進入定義檔案,可以看出引用的是C:/STLport/stlport/ stl/_vector.h了。
(如果有問題,試著Build-Clean清除掉緩衝)
引申:
現在只是能基本的使用stlport,unicode版本的編譯沒有試。另外stlport本身也有較複雜的配置,能進行最佳化,靜態連結等配置。我還沒用 到那個程度,不過有點提示,如果想進行配置,請看STLport的config檔案 (stlport/stl_user_config.h 和 stlport/stl/_site_config.h)其中的注釋告訴我們怎麼作。
如果大家有什麼疑問和高招,歡迎和我聯絡yadan6388@126.com。我對資料結構和STL有興趣。2004.8.20
Good luck:)