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