本文參照網絡文章,同時結合自己的實踐寫的
1、獲取安裝包
到ACE的官方網站http://www.cs.wustl.edu/~schmidt/ACE.html或者http://riverace.com/index.htm下載最新版的ACE,我下的是ACE-5.6.tar.gz;
菜鳥們不要下錯了,*.tar.gz是類Unix平台的版本,*.zip是windows平台的版本
2、查看autoconf版本
#autoconf -V
查看你的autoconf程序的版本 2.57g,就需要升級了
3、新建ace用戶
#useradd ace
#su - ace
並將源代碼ACE-5.6.tar.gz拷貝到ace的默認目錄,我的ace默認目錄在/home/ace
4、源代碼解壓
$cd
$tar -zxvf ACE-5.6.tar.gz
解壓後自動生成目錄ACE_wrappers
5、ACE_wrappers目錄新建子目錄
$mkdir /home/ace/ACE_wrappers/objdir
$cd /home/ace/ACE_wrappers/objdir
6、執行configure腳本
$../configure
注意此時是在/home/ace/ACE_wrappers/objdir目錄
../configure 的意思是執行父目錄也就是/home/ace/ACE_wrappers目錄中的configure
7、編譯
linux AS4 編譯ACE會碰到編譯過程中沒有反應的情況,即編譯 RB_Tree* 文件時不會報錯,但是一直停在那裡;開始不知道這個情況,再加上ACE很大,編譯很耗時,弄了一個下午發現每次都停在 RB_Tree的編譯上,才定位到問題;後來好不容易在網上查到了相關的問題解決辦法,這個時候已經是晚上了;
configure完了之後,make
$make
在make過程中,帶RB_Tree 的文件可能會編譯很久都沒反應,此時應該停掉make(用ctrl+c),然後到相應目錄,將makefile中的帶RB_Tree的文件名刪除,然後繼續make:
ctrl+C ...
$vi /home/ace/ACE_wrappers/objdir/examples/APG/Containers/Makefile
刪除“noinst_PROGRAMS =” 後面帶RB_Tree的 文件名(變量名)
$vi /home/ace/ACE_wrappers/objdir/tests/Makefile
刪除“noinst_PROGRAMS =” 後面帶RB_Tree的 文件名(變量名)
$vi /home/ace/ACE_wrappers/objdir/Kokyu/tests/DSRT_MIF/Makefile
刪除“noinst_PROGRAMS =” 後面帶MIF的 文件名(變量名)
然後繼續make
$make
整個ACE的編譯,應該要耗費幾個小時的時間,我是在虛擬機上編譯的,時間更慢
8、安裝
$su -
root's password
#make install
安裝目的是把編譯生成的ACE的庫文件、頭文件和手冊頁等安裝到/usr/local的相應目錄中去
9、設置ace用戶的環境變量
#su - ace
$vi .bashrc
ACE_ROOT=/home/ace/ACE_wrappers
export ACE_ROOT
LD_LIBRARY_PATH=$ACE_ROOT/ace:$ACE_ROOT/lib:/usr/local/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
編輯完了之後,ace用戶需要重新登陸才能生效,然後用 env命令,確認以上變量已經生效
10、鏈接文件
$cd $ACE_ROOT/ace
$ln -s config-linux.h config.h
$cd $ACE_ROOT/include/makeinclude
$ln -s platform_linux.GNU platform_macros.GNU
11、系統安裝完成
12、驗證ACE能否使用
注意,在ACE5.6版本中,《C++網絡編程,卷一》的可執行程序編譯後放在了目錄$ACE_ROOT/objdir/examples/C++NPv1,但是源代碼卻是放在$ACE_ROOT/examples/C++NPv1
$cd $ACE_ROOT/objdir/examples/C++NPv1
$make
ACE源碼中附帶有《C++網絡編程,卷一》的例子,執行一個服務器程序(隨便哪一個都行)和一個客戶端程序(Logging_Client),如果程序運行正確,說明前面的安裝和配置成功,下面你就可以開始你的ACE學習之旅了
$./iterative_logging_server 9090
$./logging_client 9090