編譯步驟:
1. 從 http://www.cs.wustl.edu/~schmidt/ACE.html 的 Obtainin ACE 鏈接處下載ACE源碼,我下載的是ACE-6.4.0.tar.gz
2. 假設下載的目錄爲~/source/ace
3. 解壓ACE源碼 tar zxvf ACE-6.4.0.tar.gz,解壓後發現ace源碼解壓到~/source/ace/ACE_wrappers目錄下
4. 參考http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/ACE/ACE-INSTALL.html#unix在linux環境下對ACE進行編譯
4.1 設置環境變量
vim ~/.bash_profile
export ACE_ROOT=/home/<your_ACE_ROOT>/ACE_wrappers
export LD_LIBRARY_PATH=/usr/local/lib:$ACE_ROOT/lib:$LD_LIBRARY_PATH
然後執行source ~/.bash_profile
4.2 創建文件 $ACE_ROOT/ace/config.h,寫入如下內容
#ifndef _CONFIG_H_
#define _CONFIG_H_
#include "ace/config-linux.h"
#endif
4.3 創建platform_macros.GNU
方法一:創建文件 $ACE_ROOT/include/makeinclude/platform_macros.GNU 寫入
include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU
方法二:利用軟連接創建(可以省略此步驟)
ln -s $ACE_ROOT/include/makeinclude/platform_macros.GNU $ACE_ROOT/include/makeinclude/platform_linux.GNU
可以在platform_macros.GNU寫入INSTALL_PREFIX=/usr/local,將ace的include lib share安裝到/usr/local目錄下
4.4 make
4.5 切換到root,因爲只有root纔可以寫文件到/usr/local,並設置環境變量
sudu -i
export ACE_ROOT=/home/<your_ACE_ROOT>/ACE_wrappers
make install
切換到/usr/local,進入include lib share可以看到ace的相關文件
4.6 上面使用$ACE_ROOT/lib作爲ace的庫文件路徑,因爲後面我們安裝到/usr/local/lib裏,可以把/usr/local/lib加入默認庫文件查找路徑
打開/etc/ld.so.conf
本來內容是如下:
include ld.so.conf.d/*.conf
我們添加ace路徑後變成如下
include ld.so.conf.d/*.conf
/usr/local/lib
保存退出!
然後執行 ldconfig就可以了
問題:
鏈接錯誤:
relocation R_X86_64_32 against `.rodata' can not be used when making a shared object
原因:
編譯.o文件的時候,沒有加參數-fPIC,(網友說這樣的問題在gcc version 3.4.6版本沒有發生,即該版本編譯器默認加上了-fPIC,未驗證過),本人在出現問題時查看了當前系統的gcc版本,爲下面紅色標記部分。某些版本的gcc默認沒加-fPIC參數。
當前程序中有用到某個靜態庫,那個靜態庫編譯.o文件的時候沒有加上-fPIC(靜態庫其實就是.o文件打包)。補充一點:我發現手寫Makefile時即使不加-fPIC也沒有這個問題,這一點很鬱悶,這個只在用automake工具編譯出.a文件時纔出現過。
解決辦法:
保證你編譯.o文件的時候,都加上-fPIC,這樣你才能編譯出動態庫來。