ACE的构建

来源:互联网 发布:ios必备软件2016 编辑:程序博客网 时间:2024/05/21 06:52

WindowsACE的构建

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
),在releasedebug两种编译方式下进行编译,得到相应的库文件(ACE.dllACE.lib ACEd.dllACEd.lib),其中ACE.dll ACE.lib是由release版生成的,ACEd.dllACEd.lib是由debug版生成的。具体操作方法:运行VC++,选择Build ->Batch Build…,将ACE-Win32 DebugACE-Win32 Release全部选中,Rebuild All即可。如下图所示:

按照上面的方法可能只编译出ACE.dll ACE.lib库文件,具体原因还不详。按照下面的操作方法进行编译可以成功生成全部库文件。具体操作方法:Build->Set Active Configuration…分别选中ACE-Win32
Release
进行编译即可。如下图所示

同样打开ace_static.dsw编译生成ACEs.lib ACEsd.libACE_RMCasts.libACE_RMCastsd.libTMCasts.libTMCastsd.lib

5. 配置ACE环境。 打开VC++6.0,选择Tools->Options->Directories
加入以下内容:

1) Executable FileE:/ACE_wrappers/bin

2) Include FileE:/ACE_wrappers

3) Library FilesE:/ACE_wrappers/lib

4) Source FilesE:/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. windowsrelease时有可能报错,错误如下:

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 MFCstatic 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来安装,会编译ACEtestsapps等。最后会生成libACE.sotestsapps下也会出来很多经过编译的文件。

当然如果你只是下载了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.SchmidtStephen 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++: PreprocessorAdditional
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

原创粉丝点击