ACE在Linux環(huán)境下的編譯安裝
[Author by Jet Yan in April 4,2005]
第一步 設(shè)置ACE_ROOT環(huán)境變量
(1)export ACE_ROOT=/home/jet/ACE_wrappers
export LD_LIBRARY_PATH=$ACE_ROOT/ace:$LD_LIBRARY_PATH
(2)或者直接在用戶目錄下編輯.bashrc文件,內(nèi)容如下:
ACE_ROOT=/home/jet/ACE_wrappers
export ACE_ROOT
LD_LIBRARY_PATH=$ACE_ROOT/ace:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
然后重新登陸
(3)另一種方法是修改系統(tǒng)的/etc/profile文件(不過這樣還是以用戶變量為
優(yōu)先設(shè)置,即如果已經(jīng)按照上面的兩種方法進(jìn)行了設(shè)置,那么以下的設(shè)置將不
會(huì)被系統(tǒng)采用。)
“vi /etc/profile”
在其中加入4行
ACE_ROOT=/opt/ACE
export ACE_ROOT
LD_LIBRARY_PATH=$ACE_ROOT/ace:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
我是加在“export PATH USER….”后的。完成后將/etc/profile執(zhí)行一次,命令:
“chmod 555 /etc/profile”
“/etc/profile”
這樣我們的ACE_ROOT就設(shè)置好了,可以用如下命令查看ACE_ROOT是否設(shè)置好了:
“echo $ACE_ROOT”
這個(gè)時(shí)候最好reboot啟動(dòng)一次linux。
-------------------------------------------------------------------
第二步 解壓出ACE-install.sh文件并修改
(1)在/home/jet下建立子目錄ACEInstall,將ACE.tar.gz上傳至該目錄
(2)從ACE.tar.gz解壓出單個(gè)文件ACE-install.sh:
tar –zxvf ACE.tar.gz ACE_wrappers/ACE-install.sh
(3)ACE-install.sh放在哪個(gè)目錄下無所謂,因?yàn)榘惭b目錄是由剛才設(shè)定的$ACE_ROOT決定的。
(4)vi ACE-install.sh
我們可以看到缺省的,這個(gè)文件是用來在UNIX下做安裝的。所以我們要將其中的有
關(guān)UNIX的部分換成linux即可。
“MY_ACEDIR=${HOME}/aceconfig” -->> “MY_ACEDIR=/home/my/ACE”
“MY_ACE_CONFIG=config-sunos5.4-sunc++-4.x.h” -->> “MY_ACE_CONFIG=config-linux.h”
“MY_ACE_GNU_MACROS=platform_sunos5_sunc++.GNU” -->> “MY_ACE_GNU_MACROS=platform_linux.GNU”
好了,文件修改完畢,保存退出“:wq”。
-------------------------------------------------------------------
第三步 運(yùn)行ACE-install.sh(shell腳本)安裝ACE
(1)當(dāng)前目錄/home/jet/ACEInstall/ACE_wrappers
(2)修改ACE-install.sh的屬性,使其可執(zhí)行
chmod 777 ACE-install.sh
(3)執(zhí)行:
./ACE-install.sh
此后將是較長(zhǎng)時(shí)間的解包、編譯等待時(shí)間。這個(gè)過程將不會(huì)出現(xiàn)任何錯(cuò)誤,因?yàn)榘惭b腳本
將為我們做很多事情,如:生成config.h,生成platform_macros.GNU。(即使出現(xiàn)刪除
文件的錯(cuò)誤,對(duì)結(jié)果應(yīng)該沒有影響,遇到這種情況要具體分析一下。)
因此就不需要按ACE-install.html中說的那樣手工做如下改動(dòng):
在$ACE_ROOT/ace目錄下:
ln -s config-linux.h config.h
在$ACE_ROOT/include/makeinclude/目錄下:
ln -s platform_linux.GNU platform_macros.GNU
(Windows中沒有文件連接這一說,所以要自己生成一個(gè)config.h文件,再在它的里面加一
句話“#include "ace/config-win32.h"”。)
(4)如果編譯中出現(xiàn)錯(cuò)誤,如“../apps/gperf”等,請(qǐng)編輯$ACE_ROOT/apps下的Makefile,
將其中的有關(guān)“gperf”的部分注釋掉,這個(gè)東西只是一個(gè)例子,可以不去編譯它。
強(qiáng)調(diào)一下,用ACE-install.sh來安裝,會(huì)編譯ACE、tests、apps等。
最后會(huì)生成libACE.so及tests、apps下也會(huì)出來很多經(jīng)過編譯的文件。
當(dāng)然如果你只是下載了ACE.tar.gz這樣的單個(gè)包來安裝,你可以手工改文件,再make,
因?yàn)橹痪幾gACE,工作就少了很多,手工做還可以接受。
(5)編譯過程日志放在/tmp/myacemaker.err
-------------------------------------------------------------------
第四步 直接測(cè)試ACE提供的例子
(1)在$ACE_ROOT/examples/Synch中,修改proc_sema.cpp文件如下:
#include "ace/OS_NS_stdio.h"
在main函數(shù)中
ACE_OS::printf("Hello,World! \n");
(2)執(zhí)行make,OK后運(yùn)行。
(3)如果運(yùn)行時(shí)裝在不到share object,可能是lib路徑問題,因?yàn)?so文件是程序運(yùn)行過程中
裝載的,不是在編譯的時(shí)候,因此要設(shè)置LD_LIBRARY_PATH:
[jet@S]$ export LD_LIBRARY_PATH=/home/jet/ACE_wrappers/lib:$LD_LIBRARY_PATH
-------------------------------------------------------------------
第五步 寫一個(gè)簡(jiǎn)單的程序測(cè)試一下ACE
(1)在/home/jet/下新建ACETest子目錄,寫好程序如client.cpp,上傳到該目錄
(2)拷貝第四步的那個(gè)Makefile文件到該目錄,并做如下修改
修改其中輸出文件名“BIN = hello”,并修改“
.obj/proc_sema.o .obj/proc_sema.so .shobj/proc_sema.o .shobj/proc_sema.so: proc_sema.cpp \”
中后面的“proc_sema.cpp”成“client.cpp”。
好,我們可以編譯一個(gè)我們自己的ACE程序了,make即可。應(yīng)該能通過,生成執(zhí)行文件client,
大小大約為112Kb。運(yùn)行之,“./client”。
-------------------------------------------------------------------
=================================================
另一種更為直接的安裝方法:
步驟1:設(shè)置環(huán)境變量
export ACE_ROOT=/home/jet/ACE_wrappers
export LD_LIBRARY_PATH=$ACE_ROOT/ace:$LD_LIBRARY_PATH
也可以直接修改.bashrc文件,以免退出后設(shè)置的這些變量消失
[env][echo $ACE_ROOT]
步驟2:
針對(duì)不同版本創(chuàng)建兩個(gè)文件鏈接:
在$ACE_ROOT/ace目錄下:
ln -s config-linux.h config.h
在$ACE_ROOT/include/makeinclude/目錄下:
ln -s platform_linux.GNU platform_macros.GNU
步驟3:
在$ACE_ROOT目錄下,新建一個(gè)目錄,用以執(zhí)行configure的結(jié)果
mkdir aaa
cd aaa
在$ACE_ROOT/aaa中運(yùn)行
../configure
在確認(rèn)結(jié)果無誤后,執(zhí)行
make
OK!
[rm -f -r *]刪除目錄下所有的文件和子目錄-f是強(qiáng)制force刪除,-r是代表目錄也刪除
[ldd 可執(zhí)行文件] 顯示該文件運(yùn)行時(shí)候需要的動(dòng)態(tài)鏈接庫
[ipcs] 顯示系統(tǒng)的共享內(nèi)存、信號(hào)量、消息隊(duì)列的情況 ipc show
[ipcrm <shm| msg| sem> id]