首先:下载ACE包,这里使用ACE-5.8.tar.gz,其他下载地址点击这里。
这里只安装了ACE,其他的包没有涉及。
1.在目录$HOME/ACE中解压ACE-5.8.tar.gz, tar -xvf ACE-5.8.tar.gz,当前目录下生成目录ACE_wrappers。我的环境下:$HOME/ACE == /home/worker/ACE
2. 设置ACE_ROOT环境变量:(可以在/etc/profile中设置(我在这里设置),也可以在个人home目录下的.bash_profile里设置)
ACE_ROOT = /home/worker/ACE/ACE_wrappers
export ACE_ROOT
2. 针对不同版本创建两个文件链接:
在$ACE_ROOT/ace目录下:
ln -s config-linux.h config.h
在$ACE_ROOT/include/makeinclude/目录下:
ln -s platform_linux.GNU platform_macros.GNU
3. 设置LD_LIBRARY_PATH环境变量:
LD_LIBRARY_PATH = $ACE_ROOT/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
(补允:注意是$ACE_ROOT/lib而不是$ACE_ROOT/ace,很多网站上都是写后者,貌似是不对的,至少我没有编译通过)
4. 在目录 $ ACE_ROOT中新建目录 build, mkdir build。
进入build目录运行配置脚本 . ./configure [options]
常用的选项有: CXXFLAGS=-O3 –disable-debug –disable-ace-examples –disable-ace-tests –without-tao
补充:如果要接定安装路径(默认安装在/usr/local),可以再加上参数:–prefix [安装路径]
即: . ./configure –prefix=/usr/local/ACE CXXFLAGS=-O3 –disable-debug –disable-ace-examples –disable-ace-tests –without-tao
5. 编译#>make
该过程可能出现有些头文件没有找到的错误,需要运行相关命令进行安装,我碰到的错误是openssl的相关头文件没有,所有需要安装libopenssl的开发包
zypper search *openssl* 用于查找关于openssl的所有包,挑选需要的进行安装,这里需要libopenssl-devel
zypper install libopenssl-devel (这里用的是SUSElinux,所有采用这条命令,
如果是其他版本采用不同的命令,如CentOS Fedora: yum search *openssl* yum install libopenssl-devel)
6. 安装 #> make install(补充:如果执行了安装,原来的$ACE_ROOT可以改为安装后的路径) 在ACE5.5中使用Epoll:
ACE_wrappers/ace/config-linux.h,增加一行:#define ACE_HAS_EVENT_POLL
在应用程序的makefile中加入 -DACE_HAS_EVENT_POLL,重新make应用程序。OK,打完收工。(修正:只需要在ACE_wrappers/ace/config-linux.h,增加一行:#define ACE_HAS_EVENT_POLL就行了,没必要在每个应用程序中都加入-DACE_HAS_EVENT_POLL)
补充:ace中很多功能并没有默认编译进来,比如epoll,fastmemcpy等,因此如果要使用这些功能,必须修改config.h文件,加入相应的宏,对ace重编译。
如果想用MSVC标准C++头,则需要在ace/config.h中增加定义:
#define ACE_HAS_STANDARD_CPP_LIBRARY 1
config.h文件内容添加,如下:
#define ACE_HAS_STANDARD_CPP_LIBRARY 1 // 使用标准C++头
#define ACE_NO_INLINE 1 // 不使用内连函数,能减小LIB和EXE的大小
7.测试.
#include <ace/Log_Msg.h>
#include <ace/OS_main.h>
using namespace std;
int ACE_TMAIN(int argc, ACE_TCHAR *argv[])
{
ACE_DEBUG((LM_DEBUG, ACE_TEXT(“Hello World!”)));
return 0;
}
编译:g++ -I/usr/local/ACE/include -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF”HelloWorld.d” -MT”HelloWorld.d” -o “demo.o” “demo.cpp”
链接: g++ -I/usr/local/ACE/include -L/usr/local/ACE/lib -lACE -lrt -lpthread -o “ACETest” demo.o
运行:./ACETest (补充:此时的LD_LIBRARY_PATH目录必须指向ACE的lib目录这里为/usr/local/ACE/lib,否则运行出错。
执行成功输出:Hello World!