ACE框架系列——linux下编译方法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/q8250356/article/details/100639046

编译步骤:

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,这样你才能编译出动态库来。

猜你喜欢

转载自blog.csdn.net/q8250356/article/details/100639046