ACE服务端编程1:使用VS2010编译ACE6.0及从ACE5.6升级的注意事项
ACE是一个跨平台的用于并发通信的C++框架,项目开始时使用的是ACE 5.6发布版,目前最新的ACE版本是6.3.0。
网上一直有一种黑ACE的氛围,主要黑点在于ACE的复杂和作者的背景,结合实际应用的经验来说,ACE还是C++里最成熟、稳定、全面的网络通信框架,看看有多少论文是与ACE有关的就能验证这一点,如果喜欢轻量级的,可以试试boost asio、Muduo,不过各有坑点~
考虑项目的稳定性和开发环境的原因,此次选择了ACE6.0.0版本作为升级版本,编译工具也从VS2003升级到VS2010。
使用VS2010编译ACE6.0:
1、下载ACE6.0版:
下载地址:http://download.dre.vanderbilt.edu/previous_versions/
最新版本下载地址:http://download.dre.vanderbilt.edu/
直接选择ACE-6.0.0.zip,不包含TAO+CIAO+DAnCE这些框架。。
2、将压缩包中的文件夹解压到D盘;
3、添加环境变量:ACE_ROOT="D:\Ace6.0\ACE_wrappers" 这是ACE解压后的目录:

4、添加环境变量:Path="%ACE_ROOT%\lib":

5、在ACE_ROOT\ace目录下新建config.h文件,文件内容:
#include "ace/config-win32.h"
6、直接用VS2010打开ACE_vc10.sln进行编译;编译成功后悔在lib目录下生成Aced.dll和Ace.dll。
ACE的项目划分较细,解决方案下有684项目,不过编译时间很快。

ACE6.0从ACE5.6升级的注意事项
开发工具同时从VS2003升级到VS2010,升级的过程较为顺利,虽然项目转换后报出100多个错误,不错主要是以下两个原因:
1、ACE5.6中的OS.h文件在6.0中被删除,改为OS_main.h,可以看到OS_main.h有下面这段注释:

解决办法:更改所有OS.h的include。
2、ACE_OS::lseek\ACE_OS::open\ACE_OS::close等函数报错,主要是ACE6.0中的文件IO模式有改变,并且默认不再包含其引用。
解决办法:在项目中引入以下几个头文件。
#include <ace/OS_NS_string.h>
#include <ace/OS_NS_stdio.h>
#include <ace/FILE_Addr.h>
#include <ace/FILE_Connector.h>
#include <ace/FILE_IO.h>
#include <ace/OS_NS_sys_stat.h>
#include <ace/OS_NS_unistd.h>
#include <ace/OS_NS_fcntl.h>
记录,为更好的自己!
ACE服务端编程1:使用VS2010编译ACE6.0及从ACE5.6升级的注意事项的更多相关文章
- ACE服务端编程3:ACE跨平台之分配堆内存
ACE服务端编程系列的第三篇,探究ACE解决不同编译器之间分配堆内存的差异. 在ACE的官方示例中会看到大量的ACE_NEW_RETURN,ACE_NEW这样的宏,这是ACE为了消除不同编译器编译的代 ...
- ACE服务端编程5:ACE日志输出和跟踪
服务器程序经常需要在命令行中显示错误消息.状态或者用来跟踪程序的执行路径,最简单的方法是使用printf. ACE提供了更强大日志设施: 1.可以在编译时启用或禁用宏: 2.可以动态的启用或禁用宏: ...
- ACE服务端编程2:ACE跨平台之数据类型和宽字符
ACE网络库的主要优势之一就是跨平台,ACE提供了操作系统API和编译器级别的跨平台解决方法,使开发人员不用再去关心操作系统和编译器的差异,但因此也带来了ACE的复杂性. ACE网络库的组织结构主要分 ...
- ACE服务端编程4:ACE跨平台之运行时初始化和关闭
参考APG里的说法:平台差异及不兼容性的一个特别的方面,是对象的运行时初始化和程序关闭时这些对象的相应析构. ACE为了明确管理对象的清理,定义了ACE_Object_Manager类,这个类不仅涉及 ...
- 《Linux多线程服务端编程:使用muduo C++网络库》上市半年重印两次,总印数达到了9000册
<Linux多线程服务端编程:使用muduo C++网络库>这本书自今年一月上市以来,半年之内已经重印两次(加上首印,一共是三次印刷),总印数达到了9000册,这在技术书里已经算是相当不错 ...
- Linux多线程服务端编程一些总结
能接触这本书是因为上一个项目是用c++开发基于Linux的消息服务器,公司没有使用第三方的网络库,卷起袖子就开撸了.个人因为从业经验较短,主 要负责的是业务方面的编码.本着兴趣自己找了这本书.拿到书就 ...
- 《Linux 多线程服务端编程:使用 muduo C++ 网络库》电子版上市
<Linux 多线程服务端编程:使用 muduo C++ 网络库> 电子版已在京东和亚马逊上市销售. 京东购买地址:http://e.jd.com/30149978.html 亚马逊Kin ...
- 《Linux多线程服务端编程》笔记——多线程服务器的适用场合
如果要在一台多核机器上提供一种服务或执行一个任务,可用的模式有 运行一个单线程的进程 运行一个多线程的进程 运行多个单线程的进程 运行多个多线程的进程 这些模式之间的比较已经是老生常谈,简单地总结 模 ...
- 《Linux多线程服务端编程》笔记——线程同步精要
并发编程基本模型 message passing和shared memory. 线程同步的四项原则 尽量最低限度地共享对象,减少需要同步的场合.如果确实需要,优先考虑共享 immutable 对象. ...
随机推荐
- Tunnel上传遇到字符[NUL]问题
模拟生产环境下数据格式,再现异常情景: Notepad++怎样输入字符[NUL]? 安装 Hex-Editor 插件: HexEditor插件用于在notepad++中查看16进制文件,只需要将此 ...
- Java动态代码模式
java动态代理(JDK和cglib) JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委 ...
- [C++] in-class initializer
C++11 introduced serveral contructor-related enhancements including: Class member initializers Deleg ...
- Python高级编程-序列化
在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict: dict1 = {'name': 'Rob', 'age': 19, 'score': 90} 可以随时修改变量,比如把age改成 ...
- jquery中的$(document).ready()、JavaScript中的window.onload()以及body中的onload()、DomContentLoaded()区别
$().ready().$(handler).$(document).ready(handler)均不是原生JS中的,都是jQuery中封装的方法.这些事件在当页面的dom节点加载完毕后就执行,无需等 ...
- JavaScript数组自定义属性
我们可以以json键值对的形式自定义属性. 首先定义一个JS数组JSarray. 然后按json键值对的形式进行赋值. 最后在控制台显示结果. 代码如下: var JSarray = new Arra ...
- animate.css与wow.js制作网站动效
animate.css 官网:https://daneden.github.io/animate.css/ 包括:attention seekers:关注者 bouncing entrances:跳跃 ...
- phpcms v9 thumb(缩略图) 函数说明
打开phcmsc/libs/functions/global.func.php文件,找到如下代码:/** * 生成缩略图函数 * @param $imgurl 图片路径 * @param $wid ...
- 完整和增量备份MySQL脚本
本文档采用mysqldump 对数据库进行备份,mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法 ...
- python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
#vi /etc/ld.so.conf.d/python2.7.conf 加入/usr/local/python27/lib 保存退出后执行 #ldconfig