ACE在Linux下的编译安装步骤(CentOS6.5 64Bit)

Linux平台安装(CentOS6.5 64bit)

1, 下载ACE软件包,上传至Linux服务器(假设目录为/opt/ace,且以root权限操作),并解压缩之。

下载网址:http://www.cs.wustl.edu/~schmidt/ACE.html

软件包名:ACE+TAO+CIAO-6.1.0.tar.gz

解压命令:tar zxvf ACE+TAO+CIAO-6.1.0.tar.gz

这里我们假设ACE安装包的解压缩目录为/pub/ACE_wrappers;安装后的目录为/opt/ace

ACE6.0版本后的安装,已经变得很简单了(据说)。确实很简单,没安装过之前的版本,所以不知道之前的版本是怎么安装的。

2,配置环境变量。

[root@localhost ACE_wrappers] pwd
/pub/ACE_wrappers
[root@localhost ACE_wrappers]# export ACE_ROOT=/pub/ACE_wrappers
[root@localhost ACE_wrappers]# export LD_LIBRARY_PATH=$ACE_ROOT/lib
附:ACE_ROOT:这个目录是在编译时会用到,因为所有的头文件都在<path_to>/ACE_wrappers/ace/目录下面,而且头文件包含格式都是<ace/Log_Msg.h>形式的。

LD_LIBRARY_PATH:这个是为了临时在程序运行的时候用的,因为安装好后,ACE的动态库(libACE.so等)都放在这个目录里面了。

这里是临时设置的,等安装后,可以再到/etc/profile文件中添加正确的环境变量(将临时目录更换成make install的目标目录),使其永久生效。

3,配置平台配置文件。

[root@localhost ACE_wrappers]# vim ace/config.h:

       添加以下内容:#include "ace/config-linux.h"
             如果有特殊要求的可以在这个文件中添加宏定义,如您需要添加检测锁的功能模块,就要添加一行:#define ACE_HAS_TOKENS_LIBRARY

附:在windows下面,这个文件的内容应该改成”#include “ace/config-win32.h”。

[root@localhost ACE_wrappers]# vim $ACE_ROOT/include/makeinclude/platform_macros.GNU

添加以下内容:include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU

附:如果想同时编译静态库,加起一行,添加:static_libs=1

如果想配置安装后路径可增加一行:INSTALL_PREFIX = /opt/ace

4,在$ACE_ROOT/目录下,执行make(make的耗时比较久,你可以使用多核心执行make命令,命令是: make -j<cpu_num>),

  ZzzZzz......

5, 执行make install命令,编译安装ACE套件。

OK,如果没报错,ACE编译安装就完成了,就这么简单。

6,配置环境变量,编辑/etc/profile,(编辑完成后,执行“. /etc/profile”生效)

export ACE_ROOT=/opt/ace
export PATH=${ACE_ROOT}/bin:$PATH
export LD_LIBRARY_PATH=/opt/ace/lib

以下是测试程序:

#include "ace/Log_Msg.h"

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

{

ACE_DEBUG((LM_DEBUG, ACE_TEXT("Hello World!\n")));

return 0;

}

//编译命令:g++ -Wall -lACE -L$ACE_ROOT/lib -I$ACE_ROOT/include abc.cpp

Windows平台安装(Win7+VS2008)

1)  下载ACE后将其解压,不妨设解压路径是:D:/ACE_Wrapper

2)  添加操作系统的ace环境变量

右击“计算机”/属性---高级系统设置/高级/环境变量

添加系统变量:ACE_ROOT=D:/ACE_Wrapper

添加用户环境变量:Path=%ACE_ROOT%/lib   //这样可以保证系统找到ace生成的动态库,不然执行时会出现:无法启动此程序,因为计算机中丢失ACEd.dll。

原因:windows下启动程序,会按照一个指定目录顺序去寻找需要的资源文件(包括dll等),原理一般windows的书上都会有介绍。

3)  设置VS2008的C++开发项目信息

打开任意一个vs2008解决方案,进入“菜单/工具/选项/项目和解决方案/VC++目录”,在右侧列表中选择“包含文件”,添加$(ACE_ROOT);

在右侧列表中选择“库文件”,添加$(ACE_ROOT)/lib。

如果当时环境变量没有生效,可以进入dos界面下修改环境变量。

比如要修改PATH,在DOS界面下执行“set PATH=C:”,然后重开一个窗口,再检查一下PATH有没有生效(命令:ECHO %PATH)

4)  配置ACE

在ACE_ROOT/ace目录下创建一个名为config.h的文件,文件内容为:

#define ACE_HAS_STANDARD_CPP_LIBRARY 1 //!<用于标准C++跨平台

#include “ace/config-win32.h” //!<在WIN32环境下使用ACE

#define ACE_USE_WCHAR

#define ACE_HAS_WCHAR //!<支持unicode

其中第一行是用于标准C++跨平台,第二行则是必须要的,表示目录是在win32的环境下进行ace项目。

5)  编译ACE

进入ACE_ROOT/ace目录,双击打开ace_vc9.sln(如果是vs2005,则打开ace_vc8.sln),选择Debug版或Release版(默认Debug),然后在菜单栏中选择“生成/生成解决方案”或按F7开始编译。

编译完成后,在ACE_ROOT/lib目录下生成的文件包含以下几个文件:ACE.dll, ACE.lib, ACEd.dll, ACEd.lib,其中文件名最后一个字符d表示是该文件Debug版本。

6)  检验ACE

打开VS2008,建立一个空项目,编写ACE代码,或将《ACE程序员手册》的第一个程序COPY过来直接编译(一般会编译出错),需要执行以下操作:

1)  C/C++ à 常规 à 附加包含目录:$(ACE_ROOT)

2)  连接器 à 常规 à 附加库目录: $(ACE_ROOT)/lib

3)  连接器 à 输入 à 附加依赖项: ACEd.lib

然后执行编译程序,运行。

常用API

传输控制协议TCP(Transmission Control Protocol):TCP提供可靠的、面向连接的运输服务,用于高可靠性数据的传输。TCP协议的可靠性是指保证每个tcp报文能按照发送顺序到达客户端。

Tcp通信过程一般为如下步骤:

  1. )服务器绑定端口,等待客户端连接。
  2. )客户端通过服务器的ip和服务器绑定的端口连接服务器。
  3. )服务器和客户端通过网络建立一条数据通路,通过这条数据通路进行数据交互。

常用API

1. ACE_INET_Addr类。

ACE"地址"类(ACE_Addr)的子类,表示TCP/IP和UDP/IP的地址。它通常包含机器的ip和端口信息,通过它可以定位到所通信的进程。

定义方式:
ACE_INET_Addr
addInfo(3000,"192.168.1.100");
常用方法:

  1. get_host_name 获取主机名
  2. get_ip_address 获取ip地址
  3. get_port_number 获取端口号

2. ACE_SOCK_Acceptor类。

服务端使用,用于绑定端口和被动地接受连接。
常用方法:

  1. open 绑定端口
  2. accept建立和客户段的连接

3.ACE_SOCK_Connector类。

客户端使用,用于主动的建立和服务器的连接。
常用方法:

  1. connect() 建立和服务器的连接。

4. ACE_SOCK_Stream类。

客户端和服务器都使用,表示客户段和服务器之间的数据通路。
常用方法:

  1. send () 发送数据
  2. recv () 接收数据
  3. close() 关闭连接(实际上就是断开了socket连接)。

下表给出了服务器端和客户端的传输过程的比较:

操作

客户端

服务器端

初始化

不需要

调用acceptor.open()绑定端口

建立连接

调用connector.connect()方法

调用acceptor.accept()方法

传输数据

发送:调用peer.recv()方法

接收:调用peer.send()方法

关闭连接

调用peer.close()方法

ACE中UDP通信

udp是一种无连接的协议,提供无连接不可靠的服务。

在ace中,通过ACE_SOCK_Dgram类提供udp通信服务,ACE_SOCK_Dgram和ACE_SOCK_Stream的API非常类似,一样提供了send,recv及close等常用操作,这里就不再累述了。

udp通信时无需像tcp那样建立连接和关闭连接,tcp编程时需要通过accept和connect来建立连接,而udp通信省略了这一步骤,相对来说编程更为简单。

由于udp通信时无建立连接,服务器端不能像Tcp通信那样在建立连接的时候就获得客户端的地址信息,故服务器端不能主动对客户端发送信息(不知道客户端的地址),只有等到收到客户端发送的udp信息时才能确定客户端的地址信息,从而进行通信。

udp通信过程如下:

  1. 服务器端绑定一固定udp端口,等待接收客户端的通信。
  2. 客户端通过服务器的ip和地址信息直接对服务器端发送消息。
  3. 服务器端收到客户端发送的消息后获取客户端的ip和端口信息,通过该地址信息和客户端通信。

和tcp编程相比,udp无需通过acceptor,connector来建立连接,故代码相对tcp编程来说要简单许多。另外,由于udp是一种无连接的通信方式,ACE_SOCK_Dgram的实例对象中无法保存远端地址信息(保存了本地地址信息),故通信的时候需要加上远端地址信息

Centos6.5下编译安装ACE6.0的更多相关文章

  1. centos6.5下编译安装mariadb-10.0.20

    源码编译安装mariadb-10.0.20.tar.gz 一.安装cmake编译工具 跨平台编译器 # yum install -y gcc* # yum install -y cmake 解决依赖关 ...

  2. centos6.7下编译安装lnmp

    很多步骤不说明了,请参照本人的centos6.7下编译安装lamp,这次的架构是nginx+php-fpm一台服务器,mysql一台服务器 (1)首先编译安装nginx: 操作命令: yum -y g ...

  3. centos6.7下 编译安装MySQL5.7

    centos6.7下编译安装MySQL5.7 准备工作 #-----依赖包及MySQL和boost安装包----- #yum包安装: shell> yum -y install gcc-c++ ...

  4. CentOS6.5_64bit下编译安装MySQL-5.6.23

    转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/44785511 ************************************** ...

  5. CentOS6.5下编译安装LAMP环境

    LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架.该框架能够满足大流量.大并发量的网站需求:当然.也可以直接使用高性能的服务器.高性能的负载均衡硬件以及CDN ...

  6. Linux(CentOS6.5)下编译安装PHP5.6.22时报错”configure: error: ZLIB extension requires gzgets in zlib”的解决方式(确定已经编译安装Zlib,并已经指定Zlib路径)

    本文地址http://comexchan.cnblogs.com/,作者Comex Chan,尊重知识产权,转载请注明出处,谢谢!   今天在CentOS6.5下编译安装PHP时,一直报错 confi ...

  7. centos7下编译安装php-7.0.15(PHP-FPM)

    centos7下编译安装php-7.0.15(PHP-FPM) 一.下载php7源码包 http://php.net/downloads.php 如:php-7.0.15.tar.gz 二.安装所需依 ...

  8. CentOS7下编译安装redis-5.0.9

    CentOS7下编译安装redis-5.0.9 本文地址http://yangjianyong.cn/?p=171转载无需经过作者本人授权 下载redis #code start wget https ...

  9. centos7.6下编译安装zabbix4.0.10长期支持版

    一.安装数据库,这里使用的是percona-server5..24版本 配置如下 [root@zabbix4_clone:~]# cat /etc/my.cnf # Example MySQL con ...

随机推荐

  1. 【C++基础】 类中static private public protected

    静态成员在一个类的所有实例间共享数据 “类属性”,是描述类的所有对象共同特征的一个数据项,对所有对象,它的值相同,static定义,为整个类所共有.相对于“实例属性” 如果static成员是私有类型, ...

  2. POJ 2155 Matrix (二维线段树入门,成段更新,单点查询 / 二维树状数组,区间更新,单点查询)

    题意: 有一个n*n的矩阵,初始化全部为0.有2中操作: 1.给一个子矩阵,将这个子矩阵里面所有的0变成1,1变成0:2.询问某点的值 方法一:二维线段树 参考链接: http://blog.csdn ...

  3. Javascript通过className选择元素

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  4. Javascript中appendChilid()内涵

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  5. div+css 定位浅析

    在用CSS+DIV进行布局的时候,一直对position的四个属性值relative,absolute,static,fixed分的不是很清楚,以致经常会出现让人很郁闷的结果. 先看下各个属性值的定义 ...

  6. mac 设置 ll 等alias 并永久生效

    往上看了在.bash_profile中配置 然后 source  的方法, 试过了, 只是当前的终端有效,当电脑重启或者关闭终端就失效了,只好看看 mac 的 profile 代码 # System- ...

  7. Python批量读取人脸图片与数据互相转换

    读取部分结果 程序 # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from PIL import ...

  8. Android zxing连续扫描

    initCamera(); if (mHandler != null) mHandler.restartPreviewAndDecode(); 在扫描完毕后执行这3句即可. 说明: 1.扫描处理方法为 ...

  9. Zookeeper、HBase的伪分布

    1.Zookeeper伪分布的部署(3个节点) 所谓的“伪分布式集群”就是在一台服务器中,启动多个Zookeeper实例.“完全分布式集群”是每台服务器,启动一个Zookeeper实例. 1.1.解压 ...

  10. Internet Explorer for Mac the Easy Way: Run IE 7, IE8, & IE9 Free in a Virtual Machine

        From link: http://osxdaily.com/2011/09/04/internet-explorer-for-mac-ie7-ie8-ie-9-free/ If you’re ...