ACE的构建(VC++6.0环境)
Windows下ACE的构建
1. 将ACE-5.5.zip解压到所需的安装目录,此处以E:\为例,解压后形成ACE_wrappers文件夹,因此ACE将会存在于ACE_wrappers\ace目录中。ACE_ROOT=E:\ACE_wrappers。
2. 在系统中新建ACE_ROOT环境变量,值设为 E:\ACE_wrappers。具体设置为:我的电脑->属性->高级->环境变量->新建
3. 在E:\ACE_wrappers\ace目录中创建一个头文件,命名为config.h,其内容为:
#include "ace/config-win32.h"(必选项)
#define ACE_HAS_STANDARD_CPP_LIBRARY 1 (MSVC自带的标准C++头文件)
#define ACE_HAS_MFC 1(与MFC一起使用)
#define ACE_NO_INLINE(取消函数内联从而减小静态库和运行码的大小)
#define ACE_AS_STATIC_LIBS(构建ACE的静态版本)
#define ACE_HAS_WINNT4 0(在Windows 9x/me上构建所需,在ACE中移掉一些WinNT/Win2K中特有的代码)
以上只需要添加前两项就可以了。
4. 在VC++中加载ACE的工程文件(ACE_ROOT \ace\ace.dsw),在release和debug两种编译方式下进行编译,得到相应的库文件(ACE.dll、ACE.lib 和 ACEd.dll、ACEd.lib),其中ACE.dll 、ACE.lib是由release版生成的,ACEd.dll、ACEd.lib是由debug版生成的。具体操作方法:运行VC++,选择Build ->Batch Build…,将ACE-Win32 Debug和ACE-Win32 Release全部选中,Rebuild All即可。如下图所示:
按照上面的方法可能只编译出ACE.dll 、ACE.lib库文件,具体原因还不详。按照下面的操作方法进行编译可以成功生成全部库文件。具体操作方法:Build->Set Active Configuration…分别选中ACE-Win32 Release进行编译即可。如下图所示
同样打开ace_static.dsw编译生成ACEs.lib、 ACEsd.lib、ACE_RMCasts.lib、ACE_RMCastsd.lib、TMCasts.lib、TMCastsd.lib
5. 配置ACE环境。 打开VC++6.0,选择Tools->Options->Directories 加入以下内容:
1) Executable File:E:\ACE_wrappers\bin
2) Include File:E:\ACE_wrappers
3) Library Files:E:\ACE_wrappers\lib
4) Source Files:E:\ACE_wrappers
在编写程序时要在Project->Settings菜单中进行如下设置:
C/C++选项卡:
Code Generation:选择多线程版运行时库(Multithreaded DLL)。
Preprocessor:在“Additional include directories”域中加入$ACE_ROOT。
Link选项卡:
Input:在“Object/library modules”域中包含适当的ACE库文件,在“Additional library
path”域中包含ACE库链接文件的路径。这通常是ACE_ROOT/ace。
其中 DLL debug对应ACEd.lib
DLL release对应ACE.lib
Static library debug对应ACEsd.lib
Static library release对应ACEs.lib
MFC DLL debug对应ACEmfcd.lib
MFC DLL release对应ACEmfc.lib
主要用到以上两个库。
6. 在系统环境的变量 path中加入E:\ACE_wrappers\bin,否则在运行程序的时候碰到寻找ace.dll或者aced.dll的问题。
7. 在MFC程序中使用时,应该在InitInstance()中添加:
WSDATA wsData;
WORD VerRequested = MAKEWORD (2, 2);
WSAStarup (VerRequested, &wsData)
注:可以在头文件中加入如下代码就不用再手动填加lib库文件
#ifdef _DEBUG
#pragma comment (lib,"aced.lib")
#else
#pragma comment (lib,"ace.lib")
#endif
8. 在windows下release时有可能报错,错误如下:
error C2039: 'TryEnterCriticalSection' : is not a member of '`global
error C2065: 'TryEnterCriticalSection' : undeclared identifier
解决办法:
工程 Project-->setting-->C/C++ 写入:_WIN32_WINNT=0x0500
Windows下ACE的构建
1. 将ACE-5.5.zip解压到所需的安装目录,此处以E:\为例,解压后形成ACE_wrappers文件夹,因此ACE将会存在于ACE_wrappers\ace目录中。ACE_ROOT=E:\ACE_wrappers。
2. 在系统中新建ACE_ROOT环境变量,值设为 E:\ACE_wrappers。具体设置为:我的电脑->属性->高级->环境变量->新建
3. 在E:\ACE_wrappers\ace目录中创建一个头文件,命名为config.h,其内容为:
#include "ace/config-win32.h"(必选项)
#define ACE_HAS_STANDARD_CPP_LIBRARY 1 (MSVC自带的标准C++头文件)
#define ACE_HAS_MFC 1(与MFC一起使用)
#define ACE_NO_INLINE(取消函数内联从而减小静态库和运行码的大小)
#define ACE_AS_STATIC_LIBS(构建ACE的静态版本)
#define ACE_HAS_WINNT4 0(在Windows 9x/me上构建所需,在ACE中移掉一些WinNT/Win2K中特有的代码)
以上只需要添加前两项就可以了。
4. 在VC++中加载ACE的工程文件(ACE_ROOT \ace\ace.dsw),在release和debug两种编译方式下进行编译,得到相应的库文件(ACE.dll、ACE.lib 和 ACEd.dll、ACEd.lib),其中ACE.dll 、ACE.lib是由release版生成的,ACEd.dll、ACEd.lib是由debug版生成的。具体操作方法:运行VC++,选择Build ->Batch Build…,将ACE-Win32 Debug和ACE-Win32 Release全部选中,Rebuild All即可。如下图所示:
按照上面的方法可能只编译出ACE.dll 、ACE.lib库文件,具体原因还不详。按照下面的操作方法进行编译可以成功生成全部库文件。具体操作方法:Build->Set Active Configuration…分别选中ACE-Win32 Release进行编译即可。如下图所示
同样打开ace_static.dsw编译生成ACEs.lib、 ACEsd.lib、ACE_RMCasts.lib、ACE_RMCastsd.lib、TMCasts.lib、TMCastsd.lib
5. 配置ACE环境。 打开VC++6.0,选择Tools->Options->Directories 加入以下内容:
1) Executable File:E:\ACE_wrappers\bin
2) Include File:E:\ACE_wrappers
3) Library Files:E:\ACE_wrappers\lib
4) Source Files:E:\ACE_wrappers
在编写程序时要在Project->Settings菜单中进行如下设置:
C/C++选项卡:
Code Generation:选择多线程版运行时库(Multithreaded DLL)。
Preprocessor:在“Additional include directories”域中加入$ACE_ROOT。
Link选项卡:
Input:在“Object/library modules”域中包含适当的ACE库文件,在“Additional library
path”域中包含ACE库链接文件的路径。这通常是ACE_ROOT/ace。
其中 DLL debug对应ACEd.lib
DLL release对应ACE.lib
Static library debug对应ACEsd.lib
Static library release对应ACEs.lib
MFC DLL debug对应ACEmfcd.lib
MFC DLL release对应ACEmfc.lib
主要用到以上两个库。
6. 在系统环境的变量 path中加入E:\ACE_wrappers\bin,否则在运行程序的时候碰到寻找ace.dll或者aced.dll的问题。
7. 在MFC程序中使用时,应该在InitInstance()中添加:
WSDATA wsData;
WORD VerRequested = MAKEWORD (2, 2);
WSAStarup (VerRequested, &wsData)
注:可以在头文件中加入如下代码就不用再手动填加lib库文件
#ifdef _DEBUG
#pragma comment (lib,"aced.lib")
#else
#pragma comment (lib,"ace.lib")
#endif
8. 在windows下release时有可能报错,错误如下:
error C2039: 'TryEnterCriticalSection' : is not a member of '`global
error C2065: 'TryEnterCriticalSection' : undeclared identifier
解决办法:
工程 Project-->setting-->C/C++ 写入:_WIN32_WINNT=0x0500