ICE是目前用得較多的開源分布式中間件,其開發人員是由前CORBA大佬級别的牛人開發的。主要是CORBA太大太複雜了,别說一般人就是有幾年開發經驗的專家也很難用好,是以,可以認為ICE是輕量級的CORBA。開源的東西挺好,可關鍵是支援太有限了,雖然有幫助文檔,但是比起商業的如MSDN還是有些遜色,并且,其使用的廣泛度有限,這也導緻相應的資料相對匮乏,就比如介紹如何在VC6.0上安裝使用ICE的資料可謂鳳毛麟角。怎奈,VC6.0上安裝使用ICE又問題多多卻又因為需求的原因不得不用VC6.0,筆者經過多天的努力雖然沒有完美地解決該問題,但也算踉踉跄跄地通過了測試,好了,廢話少說,直奔主題。
在VC6.0中使用ICE,一定要注意版本問題!首先,你需要安裝ICE環境,其次,由于貌似VC6.0自帶的子產品庫并不理想,ICE采用了stlport,用的是SGI STL,是以需要安裝stlport,stlport也是開源的項目,要使用一般需要編譯(也即安裝)。在該過程中,有很多地方需要注意,否則,你的ICE程式就會報若幹你不知所雲的錯誤。
1、版本的選擇,這可不是越新越好,因為畢竟都不是商業軟體,向後相容不是很理想(客觀來說,能做到這一步已經很不錯了,畢竟移植性問題比較複雜),如果你安裝了ICE最新版本(3.4.0)和stlport的最新版(5.2.1),會發現編譯的時候會有一大堆稀奇古怪的問題,如果你有足夠耐心解決了,又會有一大堆連結錯出來,接下來就死活通不過了,後來,筆者用VC提供的DUMPBIN工具将stlport生成的lib庫中函數導出來看看,發現編譯的函數和lib庫中的函數有些細微的差别,主要是stlport宏定義的差别,在經過幾次嘗試之後仍然未果,于是,想到了換一個版本試試,luckily enough,通過了。我通過的版本是:ICE采用的3.3.1-vc60,這個可以在www.zeroc.com下載下傳,stlport是4.5.3,可以在http://sourceforge.net/projects/stlport/files/STLport%20archive/STLport%204/下載下傳。
2、ICE的安裝很簡單,隻要認識next按鈕就可以了。stlport安裝其實也挺簡單,隻是,windows把大家慣壞了,相比就會複雜一點,需要根據你的編譯環境進行編譯進而生成相應的lib和dll,下面就簡要地說說stlport的安裝,其實,每個版本stlport是不一樣的,但是,大同小異。如何編譯和使用其實在INSTALL檔案上面描述得還算清楚啦,雖然不保證一次就能成功,但是,試幾次還是沒問題的。為了省去大家看文檔的功夫,我将安裝過程羅列一下:
2.1 、首先肯定是進入DOS環境,這個就不用說了吧。不會?百度去。運作VC安裝目錄下的VCVARS32.BAT,該批處理檔案主要是設定VC的環境變量,因為你後面要用它的編譯器cl.exe和連結器link.exe,以及nmake工具,其位置在%vc install%\vc98\bin\。
2.2、将盤符轉入stlport的存放目錄(現預設該檔案已經解壓了)下的src目錄,使用nmake工具進行編譯,nmake是一個編譯工具,在gcc下是make,它需要一個makefile檔案來進行編譯。不懂?沒關系,makefile檔案已經給你做好了(即vc6.mak檔案,它就在src目錄下),你隻需要在dos中輸入指令:nmake /fvc6.mak clean install,然後,你就會看到滿屏的編譯指令,你需要做的就是等待,這個過程可能幾分鐘吧。注意:該指令是将編譯連接配接已經安裝(即将lib檔案和.h頭檔案拷貝到指定目錄下)。如果編譯成功的話,你會發現在VC98\lib下新加了4個.lib庫檔案,在VC98\include下增加了一個stlport的檔案夾,裡面包含了标準模闆庫的頭檔案,這些東西都是你要在VC環境中設定的
3、設定VC環境。現在,平台環境算是搭建好了,但是,你還需要設定VC開發環境,具體設定是在Tools->Options->Directories,在include頁籤中添加VC98\include\stlport,并且需要将其設定在最前面(否則就不會用到stlport的STL而是vc自帶的啦),它會在編譯的時候用到;另外還需要在lib頁籤中添加VC98\lib(其實這個是可以不用的,原因是ICE3.3.1中已經包含有stlport的lib),不過添加也無妨,它會在連結的時候用到;至于#pragma僞指令加入相應的lib已經有stlport為了做了,你就無需操心了,同時,還要提醒不要忘記了将VC的運作時庫設定為多線程的,方法為:project->setting->C/C++中的Code Generation頁籤中将預設的單線程DLL改為多線程!(不要輕視這一步,如果疏忽可能會導緻莫名奇妙的編譯錯誤,是的,筆者吃過這個虧)
4、最後,需要将ice安裝目錄下iceutil檔案夾中的config.h檔案打開,将#define _STL_DEBUG注釋掉,原因是如果不注釋掉,編譯就無法通過(至少筆者試過幾次都是,也沒有更好的解決辦法)。
好了,整過過程就是如此,總結一下吧:
1)版本問題:不要用最新的版本,筆者試過不行!不過,你也可以試試,如果可以,希望分享!可行的搭配:ice采用3.3.1-vc60 + stlport-4.5.3 + VC 6.0,還有沒有其他可行的版本筆者沒有試過,至少這個是可以保證可以的。
2)stlport的安裝,可以安裝上述步驟嘗試,筆者不保證在任何機器和環境下都可以,如果不行,推薦你看看stlport自帶的INSTALL文檔,上面描述得比較到位。
3)VC環境的配置,主要是包含相應的頭檔案(.h)和連結庫(.lib);設定多線程運作時庫。
4)修改ice中的config.h檔案
說了這般多,希望對你有用,歡迎轉載和評論,但請注明出處,謝謝!