http://blog.csdn.net/liumyong/archive/2004/12/23/227140.aspx
自己作一个config.h 里面要有#include "ace/config-win32.h"
如果是win98/me的话再加上
#define ACE_HAS_WINNT4 0
然后打开ace.dsw,进行批生成(可以选择生成的库,比如(static)debug/release等,实在不行你就全生成得了)。之后会在ace目录下生成所需的.dll和.lib。
再设置一下编译环境就好了。
这是详细的介绍,在ACE_INSTALL.html里:
Building and Installing ACE on Windows with Microsoft Visual C++
Note concerning MSVC 5.0 and Service Pack 3: There has been confusion regarding MSVC 5 and its Service Pack 3. Some ACE users have, in the past, had problems with SP3 that were not present in SP2. Thanks to the diligent efforts of Bill Fulton, the mystery appears to be solved. The key? (Oh, this is a good one...) It would appear that there are actually multiple versions of SP3 in existence. The earlier ones have the bug, while later ones have it fixed. The service pack downloadable from Microsoft's web site as of June 16, 1998 works fine. The CD containing SP3, if it has part number X03-50158 on the disc (the part number on the jacket is probably different), also works fine. Note, however, that regardless of the version of SP3, there are some STL bugs in SP3 which you should get corrected. Please see http://www.dinkumware.com/vc_fixes.html for details. Thank you to Ben Eng for the pointer to the STL fixes.
Right now there is a SP4 (and hopefully only one of them) which fixes a deadlock problem in the STL.
We no longer actively support MSVC++ 5.x or earlier. ACE might work with these compilers but probably not without a bit of effort.
Uncompress the ACE distribution into a directory, where it will create a ACE_wrappers directory containing the distribution. The ACE_wrappers directory will be referred to as ACE_ROOT in the following steps -- so ACE_ROOT/ace would be C:/ACE_wrappers/ace if you uncompressed into the root directory.
Create a file called config.h in the ACE_ROOT/ace directory that contains:
#include "ace/config-win32.h"
Now load the workspace file for ACE (ACE_ROOT/ace/ace.dsw).
Each project will contain several different configurations. These are a mixture of Debug/Release, MFC/Non-MFC, and Static/Dynamic library versions. Make sure you are building the one you'll use (for example, the debug tests need the debug version of ACE, and so on). All these different configurations are provided for your convenience. You can either adopt the scheme to build your applications with different configurations, or use ace/config.h to tweak with the default settings on NT.
Note: If you use the dynamic libraries, make sure you include ACE_ROOT/lib in your PATH whenever you run programs that uses ACE. Otherwise you may experience problems finding ace.dll or aced.dll.
If you are building for Windows NT 4 or later (Windows 2000, XP, etc.) then you can start building without anymore changes. If you are building on Windows 9x/Me, then you should add the line
#define ACE_HAS_WINNT4 0
before the #include statement in ACE_ROOT/ace/config.h and it will turn off some WinNT/Win2K-specific code in ACE.
If you want to use the standard C++ headers (iostream, cstdio, ... as defined by the C++ Standard Draft 2) that comes with MSVC, then add the line:
#define ACE_HAS_STANDARD_CPP_LIBRARY 1
before the #include statement in ACE_ROOT/ace/config.h.
To use ACE with MFC libraries, also add the following to your config.h file. Notice that if you want to spawn a new thread with CWinThread, make sure you spawn the thread with THR_USE_AFX flag set.
#define ACE_HAS_MFC 1
By default, all of the ACE projects use the DLL versions of the MSVC run-time libraries. You can still choose use the static (LIB) versions of ACE libraries regardless of run-time libraries. The reason we chose to link only the dynamic run-time library is that almost every NT box has these library installed and to save disk space. If you prefer to link MFC as a static library into ACE, you can do this by defining ACE_USES_STATIC_MFC in your config.h file. However, if you would like to link everything (including the MSVC run-time libraries) statically, you'll need to modify the project files in ACE yourself.
Static version of ACE libraries are build with ACE_AS_STATIC_LIBS
defined. This macro should also be used in application projects that link to static ACE libraries
Optionally you can also add the line
#define ACE_NO_INLINE
before the #include statement in ACE_ROOT/ace/config.h to disable inline function and reduce the size of static libraries (and your executables.)
ACE DLL and LIB naming scheme:
We use the following rules to name the DLL and LIB files in ACE when using MSVC.
"Library/DLL name" + (Is static library ? "s" : "") + (Is Debugging enable ? "d" : "") + {".dll"|".lib"}
More information for ACE/TAO on MSVC can be found here. The doxygen version of this document is available under Related Topics in the ACE Library.
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
在BCB中编译ACE的方法:
新建一个console Application,建立时确保选中Multi Threaded,设置相应的Include和Library路径。
如果是Releaes Build,添加ace_b.lib到工程中,或者在头文件中添加 #pragma link "ace_b.lib"也可以。
如果是Debug Build,则换成ace_bd.lib。
一般来说编译里面的例子都需要
#include "ace/OS.h"
#include "ace/Log_Msg.h"
如果发现程序中没有,则添加上去。
程序入口错误了.
加个
#include "ace/OS_main.h"
使用Microsoft Visual C++ 在win32平台上生成和安装ACE:
注 意:关于MSVC5.0和Service Pack 3的使用有一些问题,过去一些用户在sp2中使用良好的代码在sp3种却会引发一些问题。感谢Bill 的细心查找,这一神秘的问题被解决了。答案?(哦,这儿有一个好答案。。。)这可能是因为有多个版本的sp3较早版本的sp3有一些bug,而后来的版本 修正了这些错误,从微软网站上下载的1998年6月16日版本的sp3是一个良好的版本。如果X03-50158是那些拥有sp3的光盘序列号的一部分, 那么这些版本也是良好的。但是不管任何版本的sp3,其STL的实现都有错误,详细情况请浏览http: //www.dinkumware.com/vc_fixes.html。感谢Ben Eng对这些错误的修正。
现在的SP4(希望只有一个版本)已经修正了STL中的死锁问题。
我们现在将不再积极的支持MSVC 4.X以及以前的版本,ACE可和这些编译器一起工作但是可能会丢失一些好处。
1. 将ACE分发包界压缩到一个目录中,这将在那个目录中生成一个包含ACE的目录ACE_wrappers。接下来的步骤中假设ACE分发包被解压缩到ACE_ROOT=C:/ACE_wrappers中,因此ACE将会存在于ACE_ROOT/ace目录中。
2. 在ACE_ROOT/ace目录中创建一个文件,命名为config.h,其内容为:
#include "ace/config-win32.h"
3. 在VC++中加载ACE的工程文件(ACE_ROOT/ace/ace.dsw)
4. 每个工程都会包含多个配置,这些配置是Debug/Release, MFC/Non-MFCh和Static/Dynamic库版本等选项的混合。确定你所需要的构造(例如,调试代码需要ACE的调试版本)。所有这些不同 的配置可以为你提供一些便利,你可以或者采用不同的模式以构造不同配置的应用,或者通过改变ace/config.h来改变在NT上的不同配置。
注意:如果你使用动态连接,请保证ACE_ROOT/bin被添加到你的path环境变量中,否则你将在运行程序的时候碰到寻找ace.dll或者aced.dll的问题。
5. 如果你在Windows NT或者Windows 2k上构建ACE,你可以马上开始构造她而不需任何改变,如果你在Windows 9x/me上构建,那么你必须在
ACE_ROOT/ace/config.h.的#include块之前添加一行:
#define ACE_HAS_WINNT4 0
这将在ACE中移掉一些WinNT/Win2K中特有的代码。
6. 如果你希望使用MSVC自带的标准C++头文件(C++ Standard Draft 2种定义的iostream,cstdio…..),则应该在
ACE_ROOT/ace/config.h.的#include块之前添加一行:
#define ACE_HAS_STANDARD_CPP_LIBRARY 1
7. 如果需要和MFC一起使用,增加如下定义到你的config.h文件中,注意,如果你想使用spawn一个新的线程,则必须保证使用THR_USE_AFX标志来spawn线程。
#define ACE_HAS_MFC 1
缺 省的,ACE工程使用MSVC运行时的动态DLL版本,你也可以选择使用ACE的不关心运行时库的静态(LIB)版本。我们选择仅与动态运行时库连接的原 因在于基本上所有的NT机器上都会安装这些库,而我们则可以因此而减小代码的大小。如果你希望ACE与MFC的静态版本连接,则可以在config.h中 定义ACE_USES_STATIC_MFC。然而,如果你希望静态的连接所有的库(包括MSVC运行时库),就需要自己修改工程文件了。
8. 如果要构建ACE的静态版本,则需要在config.h中定义ACE_AS_STATIC_LIBS,此宏在那些希望使用ACE的静态版本的应用工程中也必须定义。
作为一个可选项,你可以在
#include statement in ACE_ROOT/ace/config.h.之前添加一行:
#define ACE_NO_INLINE
来取消函数内联从而减小静态库(和你的运行码)的大小。
9. ACE DLL和LIB库的命名规则:
我们使用如下的规则明明使用MSVC的ACE的DLL和LIB文件。
"Library/DLL name" + (是静态库吗 ? "s" : "") + (包含调试信息 ? "d" : "") + {".dll"|".lib"}
在MSVC环境中使用ACE的更多信息可以在这里找到。
一、安装TAO,需要先编译并安装ACE。
二、 ACE的编译和安装步骤见http://www.cs.wustl.edu/~schmidt/ACE_wrappers/ACE- INSTALL.html。TAO的编译和安装步骤见http: //www.cs.wustl.edu/~schmidt/ACE_wrappers/TAO/TAO-INSTALL.html。如果你英文程度还可以 的话,最好直接阅读这两篇文档。说到底,中文文档只是“权宜之计”;汉语并不太适合进行逻辑性的表述。
但我还是把其中的一些段落编译如下(VC 6.0 + ACE-5.2.1 + TAO-1.2.1):
ACE的编译与安装
一般规则
ACE中的许多特性可以通过在$ACE_ROOT/ace/config.h中定义一些宏来进行修改。这些宏应该总是在包括针对你的平台的配置文件之前出现。
但是,如果你想要取消/重定义在针对特定平台的配置文件中定义的宏,#undef应该在配置文件之后出现。
如果你计划在多种平台上编译ACE,你也许需要考虑克隆源码树。
步骤:
1. 将ACE发布文件解压缩到某个目录中,在其中将会创建含有所有文件的ACE_wrappers目录。在下面的步骤中,ACE_wrappers目录将以ACE_ROOT为名来指称。
2. 在ACE_ROOT/ace目录中创建一个名为config.h的文件,在其中包含:
#include “ace/config-win32.h”
3. 现在加载ACE的项目文件(ACE_ROOT/ace/ace.dsw)。
4. 其中的每个项目都含有若干不同的配置(可混合Debug/Release、MFC/Non-MFC、Static/Dynamic library版本)。你可以从中选择你所需的配置,或是使用ace/config.h来进行调整。
注意:如果你使用动态链接库,在运行使用ACE的程序时,确定你在PATH中包括了ACE_ROOT/bin。
5. 如果你的系统平台是WinNT或2000,那么无需任何改动你就可以开始编译了。如果是Windows 9x/Me,你需要在ACE_ROOT/ace/config.h中的#include语句之前增加:
#define ACE_HAS_WINNT4 0
6. 如果你想要使用MSVC标准C++头(iostream、cstdio……),在ACE_ROOT/ace/config.h中的#include语句之前增加:
#define ACE_HAS_STANDARD_CPP_LIBRARY 1
7. 要与MFC一起使用ACE,再增加下面的定义:
#define ACE_HAS_MFC 1
注 意如果你想要通过CWinThread派生新线程,一定要设置THR_USE_AFX。在缺省情况下,所有的ACE项目都使用DLL版本的MSVC运行时 库。尽管如此,你仍然可以选择使用static(LIB)版本的ACE库。如果你想要将MFC作为静态库链接进ACE,你可以在config.h文件中定 义ACE_USES_STATIC_MFC。但如果你想要静态链接所有的东西(包括MSVC运行时库),你就需要自己修改ACE的项目文件。
8. ACE的静态版本是通过定义ACE_AS_STATIC_LIBS来编译的。在链接静态ACE库的应用项目中也应该使用这个宏。
你也可以在config.h文件中增加
#define ACE_NO_INLINE
来取消函数内联并减小静态库(和你的可执行程序)的大小。
9. ACE DLL和LIB的命名方案:
"Library/DLL名" + (是否为静态库 ? "s" : "") + (是否启用了Debugging ? "d" : "") + {".dll"|".lib"}
10. 配置完毕后编译即可。选择dll版本,编译生成的dll文件在ACE_ROOT/bin中,相应的lib文件在ACE_ROOT/ace中。
ACE测试
各测试程序在ACE_ROOT/tests中。在其中也有一个工作空间文件可用来编译所有的测试程序(tests.dsw)。
一旦你编译了所有测试程序(可使用批编译),你可以运行tests目录中的perl脚本run_test.pl或批处理文件run_tests.bat来进行所有测试。
TAO的编译与安装
确定VC的CL.EXE在你的访问路径上。设置ACE_ROOT或TAO_ROOT环境变量。例如:
set ACE_ROOT=C:/ACE_wrappers
TAO最好放置在ACE_wrappers(这也是缺省情况)。
1.确定ACE已经编译和安装。
2.确定ACE_wrappers/bin已在“Tools|Options”中的“Executable Directories”中列出。如果在MSVC下使用TAO_IDL编译器就需要进行此设置。
3.加载tao/TAO.dsw,并编译TAO库。
4.要编译Cubit测试,加载performance-tests/Cubit/TAO/IDL_Cubit/IDL_Cubit.dsw,并编译客户和服务器。
TAOACE.dsw
TAOACE.dsw 是一个Visual C++ 5.0/6.0工作空间文件,它加载的项目包括ACE、TAO、TAO_IDL(编译器)、gperf、orb服务库,以及一些单独的可执行程序(比如 Naming Service,等等)。它可以用于编译所有的用于编译/运行TAO应用的文件。
三、我选择编译的是dll版本 (Release),并在ACE的config.h文件中定义了“#define ACE_HAS_STANDARD_CPP_LIBRARY 1”。编译后我所得到的ace.dll的大小是1.13MB,相应的ace.lib的大小是1.77MB;TAO.dll的大小是1.47MB,相应的 TAO.lib的大小是2.74MB。所有文件约有 MB,包括源程序、编译生成的中间文件,等等,但有些例子及服务我没有编译。
将ACE与VC6集成在一起
一.打开 Tools>Options>Directories
加入以下内容:
Executable File:
C:/ACE_wrappers/bin
Include File:
C:/ACE_wrappers/
C:/ACE_wrappers/TAO
C:/ACE_wrappers/TAO/orbsvcs
Library Files:
C:/ACE_wrappers/ace
C:/ACE_wrappers/TAO/tao
C:/ACE_wrappers/TAO/orbsvcs/orbsvcs
Source Files:
C:/ACE_wrappers/ace
C:/ACE_wrappers/TAO/tao
C:/ACE_wrappers/TAO/orbsvcs/orbsvcs
二.加入 C:/ACE_wrappers/bin 到系统环境变量 path中
三.设置系统变量
ACE_ROOT=C:/ACE_wrappers
TAO_ROOT=C:/ACE_wrappers/TAO