您的位置:首页 > 其它

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

2012-03-09 00:00 260 查看
ACE历时20年,耗费数千万美金,在中间件领域享有盛誉。更可贵的是,ACE彻底的开源,且没有任何限制条件,完全是共产主义的精神,让人钦佩。
ACE的Wrapper 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,确保不会因为存在这个文件,命令不能执行

$(document).ready(function(){dp.SyntaxHighlighter.HighlightAll('code');});

原文链接:
http://blog.csdn.net/sheismylife/article/details/2812163
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: