在VS6上编译ACE的方法
1.下载最新的ACE Release版本压缩包,解压后目录为: ACE-版本号\ACE_wrappers\
2.加载工程文件,目录: ACE_wrappers\ace\ace.dsw
3.新建 config.h 文件到 ACE_wrappers\ace目录下
4.添加包含头文件声明: #include "ace/config-win32.h"
5.添加宏定义 (注意:添加在 #include 之前)
(1).#define ACE_HAS_WINNT4 0 //OS不是NT4.0或以后版本
(2).#define ACE_HAS_STANDARD_CPP_LIBRARY 1 //使用标准C++库
(3).#define ACE_HAS_MFC 1 //使用MFC库
(4).#define THR_USE_AFX 1 //使用CWinThread产生新的线程类
(5).#define ACE_USES_STATIC_MFC 1 //静态连接MFC库
(6).#define ACE_AS_STATIC_LIBS 1 //生成静态的ACE库
(7).#define ACE_NO_INLINE //是否使用内联函数在静态库内
6.编译得到.lib和.dll文件
好象使用时有个问题,不知道大家有没有碰到过:
1. 在使用ACE发布Release版本程序时,
TryEnterCriticalSection导致无法编译的问题
解决方法:
(1). 工程 Project-->setting-->C/C++ 写入:_WIN32_WINNT=0x0500
(2).包含头文件为:windows.h
如果有“Cannot open include file: 'ace/SOCK_Acceptor.h':No such file or directory”
工程-设置-C/C++: Preprocessor,附加包含路径:D:/ACE_wrappers
如果有“ You must link against multi-threaded libraries when using ACE (check your project settings)”
工程-设置-C/C++: Code Generation - Use run-time library : Debug Multithreaded Dll
如果有“error C2065: 'ACE_ERROR' : undeclared identifier”
error C2065: 'ACE_DEBUG' : undeclared identifier
#include "ace/Log_Msg.h"
error C4716: 'ace_main_i' : must return a value
在main中加入
return 0;
“error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl”
工程-设置-Link-Input: 对象/库模块:添加aced.lib
附加库路径:D:\ACE_wrappers\ace
编译client中遇到的问题
1、error C2039: 'sprintf' : is not a member of 'ACE_OS'
#include "ace/OS_NS_stdio.h"
2、error C2039: 'strlen' : is not a member of 'ACE_OS'
#include "ace/OS_NS_string.h"
3、error C2059: syntax error : '?'
错误在这一句: ACE_DEBUG((LM_DEBUG,?Usage egX <hostname> <port_number>\n?));
将?改为"
4、无法找到动态链接库aced.dll于指定的路径
为系统变量PATH加上D:\ACE_wrappers\bin
静态包含:
工程-设置-C/C++-预处理程序定义中加入 ,ACE_AS_STATIC_LIBS
*********************************************************************************
在Linux系统中安装和配置ACE
准备工作:
1.确保你的Linux操作系统的开发环境(gcc、make……)是完整且可用的。
2.在安装ACE的过程中,可能需要root权限,因此确保你拥有root帐户的密码。
3.对于典型的Redhat9系统,autoconf程序的版本可能过低,你需要首先升级它。
升级的步骤如下:
在控制台中输入 autoconf -V,查看你的autoconf程序的版本
如果低于2.57g,你需要到
http://www.gnu.org/software/autoconf/
去下载最新版本的autoconf程序,目前autoconf程序的版本是2.59
根据tarball中的安装说明,编译并安装升级autoconf程序
开始安装:
经过上面的准备工作,现在你已经具备了安装ACE的条件。下面开始正式的安装工作。
首先确定ACE的安装路径,并建立相应的目录。
这里,我们把ACE安装在/home/zhc/ace/的目录下,先执行
mkdir /home/zhc/ace
然后将获得的ACE源代码包解至该目录下。
tar zxvf ACE-5.4.tar.gz /home/zhc/ace
这时,在ace的目录下会建立一个名为ACE_wrappers的子目录,ACE所有的源代码、工具、和例子都在这个目录中。
先进入该目录,执行
cd /home/zhc/ace/ACE_wrappers
然后建立一个子目录,用于存放ACE编译后的目标文件
mkdir build
cd build
接着,执行configure脚本,检查你的系统环境,配置并生成适合你的系统的Makefile文件。
在执行configure脚本时,可以加入许多配置选项,其详细说明可以参看ACE_wrappers目录下的ACE-INSTALL.html文件,
对于Redhat9系统来说,不必加任何参数,ACE就可以很好的工作了。
../configure
在漫长的检查和配置之后,如果没有什么问题,你就可以开始编译了。
这一步很简单,执行
make
然后,泡一杯茶,静静的等待就行了。
如果编译顺利的通过(通常都会是这样的),那么恭喜你,你已经成功了一大半了,下面要做的仅仅是以些配置工作而已。
接下来的工作是安装,这一步是可选的,目的是把编译生成的ACE的库文件、头文件和手册页等安装到/usr/local的相应目录中去,为了今后使用的方便,我建议你还是进行这一步,执行
su
root's password
make install
安装之后,我们就可以进行最后的配置工作了。
首先设置环境变量ACE_ROOT,执行
setenv ACE_ROOT /home/zhc/ace/ACE_wrappers
注意其中的路径要根据你的实际情况而定
如果你不想每次都手工设定路径,可以编辑你的bash的配置文件,执行
cd
vi .bash_profile
在其中填加如下两行
ACE_ROOT=/home/work/research/ace/ACE_wrappers
export ACE_ROOT
然后,在$ACE_ROOT/ace目录中创建一个名为config.h的文件,在其中包含如下一行
#include "ace/config-linux.h"
或者,简单起见,你也可以直接建立一个指向config-linux.h的符号链接,执行
ln -s config-linux.h config.h
同样,在$ACE_ROOT/include/makeinclude目录中创建一个名为platform_macros.GNU的文件,在其中包含如下一行
include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU
或者,简单起见,你也可以直接建立一个指向platform_linux.GNU的符号链接,执行
ln -s platform_linux.GNU platform_macros.GNU
最后一步,设置环境变量LD_LIBRARY_PATH,执行
setenv LD_LIBRARY_PATH $ACE_ROOT/ace:$ACE_ROOT/lib:/usr/local/lib:$LD_LIBRARY_PATH
或者在~/.bash_profile文件中添加如下两行
LD_LIBRARY_PATH=$ACE_ROOT/ace:$ACE_ROOT/lib:/usr/local/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
安装完成:
经过上面的步骤,ACE已经安装到了您的系统上了,
下面我们将编译并执行ACE的例程以验证我们的工作。
这里我们以《C++网络编程,卷一》所带的例子为例。
进入例程目录,执行
cd $(ACE_ROOT)/examples/C++NPv1
编译例子程序,执行
make
如果前面的安装和配置正确,很快就能够得到编译后的例子程序。
分别执行一个服务器程序(随便哪一个都行)和一个客户端程序(Logging_Client),
如果程序运行正确,说明前面的安装和配置成功,下面你就可以开始你的ACE学习之旅了