本文参照网络文章,同时结合自己的实践写的
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