下载ACE源码以及ACE的编程文档:http://www.cs.wustl.edu/~schmidt/ACE.html
源代码包解压之后,会在该目录下生成一个名称为ACE_wrappers的子目录,该目录是发行包的顶级目录,称为$ACE_ROOT,其中包括ACE的源代码、工具和例子。ACE源代码和头文件位于$ACE_ROOT/ace目录中。
定义:$ACE_ROOT=/usr/local/ACE/ACE_wrappers
步骤1:设置ACE_ROOT的环境变量
linux-m70n:vi /etc/profile
在文件末尾添加如下内容:
export ACE_ROOT=/usr/local/ACE/ACE_wrappers
export LD_LIBRARY_PATH=$ACE_ROOT:$LD_LIBRARY_PATH
保存退出:
linux-m70n:source /etc/profile
步骤2:在$ACE_ROOT/ace目录中创建config.h文件,添加如下内容后保存退出
#include “ace/config-linux.h”
步骤3:在$ACE_ROOT/include/makeinclude目录中创建platform_macros.GNU文件,添加如下内容后保存退出
include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU
步骤4:在$ACE_ROOT目录下创建build子目录,以后经在该目录里编译ACE
linux-m70n:cd $ACE_ROOT
linux-m70n:mkdir build
在build目录下执行configure命令,生成适合本系统的Makefile文件。配置时可以加入其他选项,具体选项使用configure –help查看,详细说明请参阅ACE_wrappers目录下的ACE-INSTALL.html文件。
linux-m70n:cd $ACE_ROOT/build
linux-m70n:../configure –prefix=/usr/local/ACE
如果环境都OK的话,会正确的生成Makefile文件,如果这里出错了请参看config.log寻找具体原因。
linux-m70n:cd $ACE_ROOT/build
linux-m70n:make
将生成的头文件、库文件以及手册页安装到指定的目录中,执行命令:
linux-m70n:make install
linux-m70n:vi /etc/ld.so.conf
在ld.so.conf文件的中,加入一面一行
/usr/local/ACE/lib
然后,执行命令:
linux-m70n:ldconfig
步骤1 编写Makefile文件
将如下内容保存为makefile,然后将该文件存放于目录/usr/local/ACE/ACE_wrappers/examples/C++NPv1内。
INC_ACE =-I/usr/local/ACE/include LIB_ACE =-L/usr/local/ACE/lib -lACE all:Iterative_Logging_Server Logging_Client Iterative_Logging_Server:Iterative_Logging_Server.cpp Logging_Handler.o Logging_Server.o g++ -Wall -o Iterative_Logging_Server Iterative_Logging_Server.cpp Logging_Server.o Logging_Handler.o -I./ $(INC_ACE) $(LIB_ACE) Logging_Server.o:Logging_Server.cpp g++ -Wall -c Logging_Server.cpp -I./ $(INC_ACE) $(LIB_ACE) Logging_Client:Logging_Client.cpp Logging_Handler.o g++ -Wall -o Logging_Client Logging_Client.cpp Logging_Handler.o -I./ $(INC_ACE) $(LIB_ACE) Logging_Handler.o:Logging_Handler.cpp g++ -Wall -c Logging_Handler.cpp -I./ $(INC_ACE) $(LIB_ACE)
步骤2 编译程序
执行命令如下:
linux-m70n:make –f makefile
步骤3 运行
编译通过之后,在该目录会生成两个可执行文件Iterative_Logging_Server(服务端)和Logging_Client(客户端)。执行如下测试:
在一个终端上执行命令:
linux-m70n:./Iterative_Logging_Server 12220
在另外一个终端上执行命令:
linux-m70n:./Logging_Client
然后在该终端上随意输入内容,并回车。
在该目录下会生成一个名称为:logging_server.log的文件,该文件中包含了在客户终端上输入的内容。
在安装ACE过程中遇到的一个问题:
configure:50033: error: cannot compute sizeof (wchar_t), 77 See `config.log' for more details.
按照配置错误去查看config.log寻找原因,搜索wchar_t发现有如下信息:
configure:49639: checking for wchar_t configure:49693: result: yes configure:49696: checking size of wchar_t configure:50015: gcc -o conftest -g -O2 -pthread -pipe conftest.cc >&5 /tmp/cc9zSuj4.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0' collect2: ld returned 1 exit status configure:50018: $? = 1 configure: program exited with status 1 configure: failed program was:
根据输出日志来看,在检测sizeof(wchar_t)的时候出错了,具体原因就是”undefined reference to `__gxx_personality_v0`”。而出现这个错误的一般原因是:”__gxx_personality_v0″错误信息表示试图用gcc编译c++的代码。但”configure: failed program was:”后输出的检测代码并不是C++,而是纯C代码。但configure把这段段代码保存为了conftest.cc,也就是说必须要用g++去编译,在这里不知道为什么选择了gcc去编译,这就是出现问题的根本所在。
使用echo $CC;echo $CXX,发现在环境变量中将CC和CXX定义为了gcc,于是准备把它修正过来:
vi /etc/profile
将CC和CXX前加上#,或者直接删除掉
source /etc/profile
修改完毕后,重新配置,即可!