UBuntu8.04的ACE5.6编译和环境配置

ACE历时20年,耗费数千万美金,在中间件领域享有盛誉。更可贵的是,ACE彻底的开源,且没有任何限制条件,完全是共产主义的精神,让人钦佩。

ACEWrapper Facade模式解决了夸平台的c++编程问题。虽然我们现在有标准C++,但是目前的C++标准库对于多线程、网络通信、并发处理、进程管理以及小内存分配、共享内存、内存映射文件等诸多实际运用中的问题没有支持。相信随着时间的推移,C++标准库会越来越多的关心我们程序员实际编程中的问题,但是现在,我需要ACE.

ACE的文档在http://www.dre.vanderbilt.edu/Doxygen/Stable/ace/index.html

,你可以从www.riverace.com下载最新的ACE安装包。

UBuntu8.04下安装ACE开发环境

首先要确保UBuntu已经安装了g++和openssl。
apt-get install g++来安装g++
通过新立得软件查找libssl来安装。我安装的是libssl0.9.8,libssl0.9.8-dbg,libssl-dev。
然后将ACE压缩包解压,并放到自己的目录(我的目录为/home/freebird/software)下,仔细阅读install.html中关于 unix的部分,按照上面的做,我没有使用传统方式。如果执行configure命令或者make命令时报错,通常是缺少相应的库。安装指定的库以后,一定要重新执行../configure命令。
目录/home/freebird/software/ACE_wrappers/build/ace/.libs下的libACE-5.6.so文件就是我们的动态库文件。

注意,执行make install的时候,要用sudo命令

如果不使用最新版本,也可以用下面的命令在Ubuntu中直接安装,或者用新立德搜索libace。

sudo apt-get install libace-dev libace-doc libace5.4.7c2a libssl-dev

使用ACE编写第一个程序

代码编写需要了解ACE的一些基本知识,所有的ace头文件都在ace目录下,我的机器上ace目录安装在/software/ACE_wrappers

 

 

 

为了确保动态连接库运行时加载正确,需要如下设置:

UBuntu8.04的配置方法--在动态库的配置文件子目录(/etc/ld.so.conf.d)里增加一个文件ace.conf

内容为:/home/freebird/software/ACE_wrappers/build/ace/.libs 这是动态链接库的目录路径,

然后执行ldconfig命令修改全局缓冲文件

 

如果别的linux系统没有/etc/ld.so.conf.d目录,就需要直接将/software/ACE_wrappers/ace加到/etc/ld.so.conf文件中,然后执行ldconfig命令

 

下面编写测试代码,如果编译通过,那么环境配置正确:

 

 

#include "ace/Log_Msg.h"

#include "ace/OS_main.h"

#include "ace/INET_Addr.h"

#include "ace/SOCK_Connector.h"

#include "ace/SOCK_Stream.h"

 

int ACE_TMAIN(int argc, ACE_TCHAR* argv[])

{

ACE_DEBUG((LM_DEBUG,ACE_TEXT("freebird./n")));

ACE_SOCK_Connector connector;

ACE_SOCK_Stream peer;

ACE_INET_Addr peer_addr;

 

if(peer_addr.set(80,"192.168.22.26")==-1)

return 1;

else if(connector.connect(peer,peer_addr)==-1)

return 1;

}

 

 

编译的命令并不复杂,主要是编译参数要注意:

g++ -I$ACE_ROOT -L$ACE_ROOT/ace test.cc -lACE

-l后面指定头文件目录/home/freebird/software/ACE_wrappers

-L后面指定ACE库文件路径/software/ACE_wrappers/ace

-l后面指定库文件名称ACE

 

编写一个makefile也很简单,内容如下:

 

#define some variables
Shell=/bin/sh
CPlus=g++
CPlusInclude=-I$(ACE_ROOT)
CPlusExtraInclude=-L$ACE_ROOT/ace
Libs=-lACE
CPlusFlags=-Wall -c -g


test.out:
    $(CPlus) -o test.out $(CPlusInclude) $(CPlusExtraInclude)  test.cc $(Libs)

#make clean will execute this
clean:
    rm -f *.o *.out

#make will ignore the file which has one of the below names
.PHONY:

clean test.out

 

注意:

1)编译命令一定要用tab符号开头

2).PHONY规定的clean 和 test.out,确保不会因为存在这个文件,命令不能执行

你可能感兴趣的:(ubuntu)