ACE的构建

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=0×0500

 

 

 

 

亲身体验版:

1.       下载 ACE ,解包 (主页 http://www.cs.wustl.edu/~schmidt/ACE.html

2.       ACE_wrappers/ace 目录中创建一个头文件,命名为 config.h ,其内容为“ #include
"ace/config-win32.h"

3.       VC9 下打开 ACE_wrappers 下的 ACE_vc8.sln ,允许 VC 自动转换。对左列的 ACE 项目进行编译,分别编译 debug 版本和 release 版本。生成的 lib 文件和 dll 文件在 ACE_wrappers 下的 lib 文件夹下。但是,这里的 lib 不能直接连到主程序中,如果要运行的话会提示需要 ACE.dll 文件

4.       所以需要打开 ACE_wrappers 下的 ACE_Static.sln 工程,对左列的 ACE_Static 项目进行编译,分别编译 debug 版本和 release 版本。所生成的 lib 文件和 dll 文件也在 ACE_Wrappers 下的 lib 文件夹下

5.       打开需要用 ACE 的工程,假设要使用 static MFC static ACE

a)        
Project->Properties->configuration
properties->General->Use of MFC
选择 use MFC in a static library

b)       
Project->Properties->C/C++->general->Additional
Include Directories
添加 ACE_Wrappers 的路径 . ( 例如 ../../..ACE_Wrappers)

c)        
Project->Properties->linker->general->Additional
Library Directories
添加 (ACEs.lib for release, ACEsd.lib for debug) 的路径 . ( 例如 ../../..ACE_Wrappers/lib)

d)       
Project->Properties->linker->input->Additional
Dependencies
添加 (ACEs.lib for release, ACEsd.lib for debug)

e)        
Project->properties->c/c++->preprocessor->preprocessor
definations
添加 ACE_AS_STATIC_LIBS

f)         
OK ,可以 build 了。其 release 版本可以直接拷贝到别的机器上运行

 

 

 

 

 

 

Linux ACE 的构建

1. 设置环境变量 ACE_ROOT ,命令如下:

vi /etc/profile
,在“ export PATH USER . ”后加入 4

l ACE_ROOT=/opt/ACE

  export ACE_ROOT

  LD_LIBRARY_PATH=$ACE_ROOT/acelLD_LIBRARY_PATH

  export LD_LIBRARY_PATHl


成后将 /etc/profile 执行一次,命令:“ chmod 555 /etc/profile ”,“ /etc/profile ”。这样我们的 ACE_ROOT 就设置好了,可以用如下命令查看 ACE_ROOT 是否设置好了:
echo $ACE_ROOT
,这个时候最好 reboot 启动一次 linux

2. 解压 ACE.tar.gz 包:


要自己手工将 ACE.tar.gz 包完全解开,特别强调不要完全解开,后面可以看到安装脚本会给我们解开它的;如果你手工解开全部,安装脚本将会将你的解
压缩目录删除的!我们要做的事就只是将 ACE.tar.gz 包中的 ACE-install.sh 安装脚本单独解出来,并对其修改。我们只要这一个文件就可
以。用 mkdir 建目录,如 /home/my/ACE ,然后将你的 ACE.tar.gz 放在此目录下(用 cp 命令拷贝或 mv 命令移动到此目录)。注意这个
目录将是你的一个存放 ACE.tar.gz 的目录,安装脚本会来这个目录找这个文件的,这个目录和 ACE_ROOT 是不一样的,且 ACE- install.sh 也提示不要将这两个目录设置成同一个目录。 ACE_ROOT 将是我们的安装目标目录。

3. ACE.tar.gz 解压出单个文件 ACE-install.sh ,命令如下:

tar –zxvf ACE+TAO+CIAO.tar.gz ACE_wrappers/ACE-install.sh”


好后,会出来一个新的子目录“ ACE_wrappers ”。此时可以先将 ACE-install.sh 移到外面的目录来:“ mv /ACE_wrappers/ACE-install.sh . . ”代表当前目录。当然 ACE-install.sh 在什么路径下是没什么影响的,因为我们要对 ACE-install.sh 的内容进行修改的,里面有
很多路径要修改。现在在 /home/my/ACE 就有了 ACE-install.sh ,我们现在用 vi 对其进行修改,修改前自己可以先备份一个。命令:
cp ACE-install.sh ACE-install.sh.bak ”,“ vi ACE-install.sh ”先找到“ MY_ACEDIR=${HOME}/aceconfig ”,将其改成“ MY_ACEDIR=
/home/my/ACE
”,就是改成我们自己建的、放有 ACE.tar.gz 文件的目录,之后去掉前面的注释“ # ”号。接着在下面一点,找到
MY_ACE_CONFIG=config-sunos5.4-sunc++-4.x.h ”,将其修改成“ MY_ACE_CONFIG=config-
linux.h
”,即改成 linux 下的配置文件。继续改,找到“ MY_ACE_GNU_MACROS=platform_sunos5_sunc++. GNU ”,将其改成“ MY_ACE_GNU_MACROS=platform_linux.GNU ”。这个是各种操作系统平台下的 GNU 宏文件设置。文件
修改完毕,保存退出“ :wq ”。

4. 安装 ACE

此时应该是在 /home/my/ACE 目录下,我们执行: h./ACE-install.sh


后将是较长时间的解包、编译等待时间。这个过程将不会出现任何错误,因为安装脚本将为我们做很多事情,如:生成 config.h ,生成 platform_macros.GNU 。我们不需要按 ACE-install.html 中说的手工改东西:不用做连接“ ln -s config-sunos5-sunc++-4.x.h config.h ”,安装脚本会给我们做好; ( 题外话: Windows 中没有文件连接这一说,所以要自己生成一个 config.h 文件,再在它的里面加一
句话“ #include "ace/config-win32.h" ”。 )

如果编译中出现错误,如“ ../apps/gperf ”等,请编辑 $ACE_ROOT/apps 下的 Makefile ,将其中的有关“ gperf ”的部分注释掉,这个东西只是一个例子,可以不去编译它。

强调一下,用 ACE-install.sh 来安装,会编译 ACE tests apps 等。最后会生成 libACE.so tests apps 下也会出来很多经过编译的文件。

当然如果你只是下载了 ACE.tar.gz 这样的单个包来安装,你可以手工改文件,再 make ,因为只编译 ACE ,工作就少了很多,手工做还可以接受。

ACE 学习资料

1. ACE 程序员指南 : 网络与系统编程的实用设计模式 网络与系统编程的实用设计模式    ACE Programmer’s Guide
practical Design Patterns for Network and Systems Programming

( )Stephen D. Huston,( )James CE
Johnson,(
)Umar Syyid

马维达
中国电力出版社

2. C++ 网络编程 1 :运用 ACE 和模式消除复杂性

C++ Network Programming Volume 1 Mastering
Complexity with ACE and Patterns

[ ]Douglas
C.Schmidt,Stephen D.Huston /
[ ]Douglas C.Schmidt Stephen D.Huston 著,於春景
   华中科技大学出版社

3. C++ 网络编程 , 2 基于 ACE 和框架的系统化复用

C++ network Programming, Volume 2
Systematic Reuse with ACE and Frameworks

Douglas C.Schmidt, Stephn D.Huston /    | 马维达 电子工业出版社

4. ACE 的官方网站   http://www.cs.wustl.edu/~schmidt/ACE.html

5. 马维达的主页

http://www.flyingdonkey.com/

6. RIVERACE 公司 http://www.riverace.com

7. 灰狐           http://www.huihoo.com/

8.    
ACE
类库    
http://dev.csdn.net/article/40/40700.shtm

 

常见错误

错误 1

Cannot open include file: ace/SOCK_Acceptor.h: No such file        or directory”

解决方法:

Project->settings->C/C++: Preprocessor Additional
include directories
中加入 $ACE_ROOT ,如 E:/ACE_wrappers

错误 2

You must link against multi-threaded librarie

 

文章出处: http://www.diybl.com/course/3_program/c++/cppjs/200878/132366.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值