ACE框架系列——linux下編譯方法

編譯步驟:

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,這樣你才能編譯出動態庫來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章