本文详细描述了在Linux操作系统上安装和配置“自适应通信环境(ACE)”的过程和注意事项。zCkLinux联盟
文中的描述基于RedHat Linux 9操作系统和ACE 5.4版zCkLinux联盟
准备工作:zCkLinux联盟
1.确保你的Linux操作系统的开发环境(gcc、make……)是完整且可用的。zCkLinux联盟
2.在安装ACE的过程中,可能需要root权限,因此确保你拥有root帐户的密码。zCkLinux联盟
3.对于典型的Redhat9系统,autoconf程序的版本可能过低,你需要首先升级它。zCkLinux联盟
升级的步骤如下:zCkLinux联盟
- 在控制台中输入 autoconf -V,查看你的autoconf程序的版本
- 如果低于2.57g,你需要到http://www.gnu.org/software/autoconf/去下载最新版本的autoconf程序,目前autoconf程序的版本是2.59
- 根据tarball中的安装说明,编译并安装升级autoconf程序
开始安装:zCkLinux联盟
经过上面的准备工作,现在你已经具备了安装ACE的条件。下面开始正式的安装工作。zCkLinux联盟
- 首先确定ACE的安装路径,并建立相应的目录。zCkLinux联盟
这里,我们把ACE安装在/home/zhc/ace/的目录下,先执行zCkLinux联盟
mkdir /home/zhc/ace
- 然后将获得的ACE源代码包解至该目录下。zCkLinux联盟
tar zxvf ACE-5.4.tar.gz /home/zhc/ace
- 这时,在ace的目录下会建立一个名为ACE_wrappers的子目录,ACE所有的源代码、工具、和例子都在这个目录中。zCkLinux联盟
先进入该目录,执行zCkLinux联盟
cd /home/zhc/ace/ACE_wrapperszCkLinux联盟
然后建立一个子目录,用于存放ACE编译后的目标文件zCkLinux联盟
mkdir buildzCkLinux联盟
cd build
- 接着,执行configure脚本,检查你的系统环境,配置并生成适合你的系统的Makefile文件。zCkLinux联盟
在执行configure脚本时,可以加入许多配置选项,其详细说明可以参看ACE_wrappers目录下的ACE-INSTALL.html文件,zCkLinux联盟
对于Redhat9系统来说,不必加任何参数,ACE就可以很好的工作了。zCkLinux联盟
../configure
- 在漫长的检查和配置之后,如果没有什么问题,你就可以开始编译了。zCkLinux联盟
这一步很简单,执行zCkLinux联盟
makezCkLinux联盟
然后,泡一杯茶,静静的等待就行了。
- 如果编译顺利的通过(通常都会是这样的),那么恭喜你,你已经成功了一大半了,下面要做的仅仅是以些配置工作而已。zCkLinux联盟
接下来的工作是安装,这一步是可选的,目的是把编译生成的ACE的库文件、头文件和手册页等安装到/usr/local的相应目录中去,为了今后使用的方便,我建议你还是进行这一步,执行zCkLinux联盟
suzCkLinux联盟
root's passwordzCkLinux联盟
make install
- 安装之后,我们就可以进行最后的配置工作了。zCkLinux联盟
首先设置环境变量ACE_ROOT,执行zCkLinux联盟
setenv ACE_ROOT /home/zhc/ace/ACE_wrapperszCkLinux联盟
注意其中的路径要根据你的实际情况而定zCkLinux联盟
如果你不想每次都手工设定路径,可以编辑你的bash的配置文件,执行zCkLinux联盟
cdzCkLinux联盟
vi .bash_profilezCkLinux联盟
在其中填加如下两行zCkLinux联盟
ACE_ROOT=/home/work/research/ace/ACE_wrapperszCkLinux联盟
export ACE_ROOT
- 然后,在$ACE_ROOT/ace目录中创建一个名为config.h的文件,在其中包含如下一行zCkLinux联盟
#include "ace/config-linux.h"zCkLinux联盟
或者,简单起见,你也可以直接建立一个指向config-linux.h的符号链接,执行zCkLinux联盟
ln -s config-linux.h config.h
- 同样,在$ACE_ROOT/include/makeinclude目录中创建一个名为platform_macros.GNU的文件,在其中包含如下一行zCkLinux联盟
include $(ACE_ROOT)/include/makeinclude/platform_linux.GNUzCkLinux联盟
或者,简单起见,你也可以直接建立一个指向platform_linux.GNU的符号链接,执行zCkLinux联盟
ln -s platform_linux.GNU platform_macros.GNU
- 最后一步,设置环境变量LD_LIBRARY_PATH,执行zCkLinux联盟
setenv LD_LIBRARY_PATH $ACE_ROOT/ace:$ACE_ROOT/lib:zCkLinux联盟
/usr/local/lib:$LD_LIBRARY_PATHzCkLinux联盟
或者在~/.bash_profile文件中添加如下两行zCkLinux联盟
LD_LIBRARY_PATH=$ACE_ROOT/ace:$ACE_ROOT/lib:zCkLinux联盟
/usr/local/lib:$LD_LIBRARY_PATHzCkLinux联盟
export LD_LIBRARY_PATH
安装完成:zCkLinux联盟
经过上面的步骤,ACE已经安装到了您的系统上了,下面我们将编译并执行ACE的例程以验证我们的工作。zCkLinux联盟
这里我们以《C++网络编程,卷一》所带的例子为例。zCkLinux联盟
- 进入例程目录,执行zCkLinux联盟
cd $(ACE_ROOT)/examples/C++NPv1
- 编译例子程序,执行zCkLinux联盟
makezCkLinux联盟
如果前面的安装和配置正确,很快就能够得到编译后的例子程序。
- 分别执行一个服务器程序(随便哪一个都行)和一个客户端程序(Logging_Client),如果程序运行正确,说明前面的安装和配置成功,下面你就可以开始你的ACE学习之旅了
补充
下载ace 5.6
在根目录下建立一个文件夹
mkdir /ace
把下载的ace包移过去,解压得到一个文件夹ACE_wrappers
然后进入这个文件夹,看看里面的readme就可以晓得,linux下如何编译和安装
网上很多人说要建立一个config.h的文件,那是好多年前的老皇历了,readme里面没有说要建立这么个玩意,那就不建立。
直接进入主题,编译:
cd /ace/ACE_wrappers
mkdir build
cd build
../configure 我们使用默认的option
make
make install
过程很快,然后我们进入到/usr/local目录下,可以看到include里面有ace要用的头文件,lib里面有ace要用的库文件
linux的库文件 的搜索路径如下:
/usr/include
/usr/local/include
/usr/lib/gcc-lib/i386-linux/2.95.2/include
/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../include/g -3
/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i386-linux/include
因此,我们不用设置ace的头文件了。
但是ace库文件不是linux的自带的默认的库文件,因此我们使用的时候要带上,而ace现在的库文件并不是系统的,先看一下默认的:
默认的动态库搜索路径/lib和/usr/lib
我们把ace所在的库文件路径添加进去:
一:
在/etc/bashrc中加入:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
重启
二:
打开/etc/ld.so.conf
本来内容是如下:
include ld.so.conf.d/*.conf
我们添加ace路径后变成如下
include ld.so.conf.d/*.conf
/usr/local/lib
保存退出!
然后执行 ldconfig
就可以了。
下面我们弄一个简单的ace程序:
/////////////////////////hello.cpp
#include "ace/OS.h"
#include "ace/Log_Msg.h"
int main (int argc, char *argv[])
{
ACE_DEBUG((LM_DEBUG,"Hello, ACE!\n"));
ACE_OS::exit(1);
return 0;
}
这么就不写makefile了,直接用g++编译就是了。
编译
g++ hello.cpp -o hello -lACE
运行:
./hello
结果:
[root@BTazuo ~]# ./hello
Hello, ACE!