cyper@snnn /cygdrive/f/temp
$ gunzip ACESRC.tar.gz
cyper@snnn /cygdrive/f/temp
$ tar xf ACESRC.tar
查看下有些什么
cyper@snnn /cygdrive/f/temp
$ cd ACE_wrappers
cyper@snnn /cygdrive/f/temp/ACE_wrappers
$ ls
ACE-INSTALL.html Makefile ace-config.1.in m4
ACE-install.sh Makefile.am ace-config.in man
ACEXML PROBLEM-REPORT-FORM aceConf.sh.in netsvcs
ASNMP README apps os-patches
AUTHORS THANKS bin performance-tests
COPYING TODO docs tests
ChangeLog VERSION etc websvcs
ChangeLogs acconfig.h examples
FAQ ace include
下面我做下各个目录里是什么
ace: 含有ACE工具包的源码
bin:很多有用的实用程序,以后再说, 你现在可以不管他
apps:含有很多基于ACE的实用程序,非常推荐你好好看看.不同于examples,这里面都是非常经典而短小精悍的实用程序,比如JAWS 就是一个小型的HTTP服务器,你可以拿它来代替iis,不过要它支持asp就得自己写插件了.Gateway,顾名思义,路由,不要在问我代理服务器该怎么做了,这有路由!而且这些代码的可重用度非常高.简直就是一个小型的库
doc:文档,太少了,有和没有没区别,而且你还可以用doxygen自动生成一个
examples:不用说了吧
include/makeinclude 含有ACE的所有的构建系统文件
test:测试,你可以用来测试下你的ACE装好了没有
下面开始做配置
有人可以问我为什么不讲windows或linux,而要讲cygwin呢, 很简单,那些平台太通用了,配置文件基本你就不用管,傻瓜型安装
cyper@snnn /cygdrive/f/temp/ACE_wrappers
$ export ACE_ROOT=$pwd
cyper@snnn /cygdrive/f/Temp/ACE_wrappers/ace
$ xemacs $ACE_ROOT/ace/config.h
写入
#include "ace/config-cygwin32.h"
写入
include $(ACE_ROOT)/include/makeinclude/platform_cygwin32.GNU
注意,这是一句GNU makefile的include 命令,前面没有'#'!!!
cyper@snnn /cygdrive/f/Temp/ACE_wrappers/ace
$ make
如果你收到这样的信息(你以后会经常碰到)
cyper@snnn /cygdrive/f/Temp/ACE_wrappers/ace
$ make
make[1]: Entering directory `/cygdrive/f/Temp/ACE_wrappers/ace'
Makefile.ace:330: /include/makeinclude/wrapper_macros.GNU: No such file or directory
Makefile.ace:474: /include/makeinclude/macros.GNU: No such file or directory
Makefile.ace:475: /include/makeinclude/rules.common.GNU: No such file or directory
Makefile.ace:476: /include/makeinclude/rules.lib.GNU: No such file or directory
Makefile.ace:482: /include/makeinclude/rules.nonested.GNU: No such file or directory
Makefile.ace:483: /include/makeinclude/rules.local.GNU: No such file or directory
make[1]: *** No rule to make target `/include/makeinclude/rules.local.GNU'. Stop.
make[1]: Leaving directory `/cygdrive/f/Temp/ACE_wrappers/ace'
make: *** [all] Error 2
就说明你没有设置环境变量ACE_ROOT
如果你在make的过程中收到什么错误的话,众所周知,cygwin是不稳定的,比如,我就遇到了错误提示
"ACE_HAS_SIGINFO_T重定义"
怎么办?一看是OS.h和我的系统头文件singal.h中关于这个struct的定义冲突,两个定义不一样,怎么办 ?
看看OS.h是怎么写的
# if !defined (ACE_HAS_SIGINFO_T)
struct ACE_OS_Export siginfo_t
{
siginfo_t (ACE_HANDLE handle);
siginfo_t (ACE_HANDLE *handles); // JCEJ 12/23/96
/// Win32 HANDLE that has become signaled.
ACE_HANDLE si_handle_;
/// Array of Win32 HANDLEs all of which have become signaled.
ACE_HANDLE *si_handles_;
};
# endif /* ACE_HAS_SIGINFO_T */
好吧,我就在上面加上一行
#define ACE_HAS_SIGINFO_T
然后就是无尽期的等待了
不要急,ACE编译起来是很慢
p.s.
$(ACE_ROOT)/include/makeinclude/platform_cygwin32.GNU
中有关于cpu的设置
你可以像我一样打开对althon-xp的优化
加上
TCPU = athlon-xp就可以了
默认是对 pentiumpro的优化
最后就是在写应用程序的时候要注意了
在Makefile/Makefile.am中的最后加上
include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU
include $(ACE_ROOT)/include/makeinclude/macros.GNU
include $(ACE_ROOT)/include/makeinclude/rules.common.GNU
include $(ACE_ROOT)/include/makeinclude/rules.nested.GNU
include $(ACE_ROOT)/include/makeinclude/rules.bin.GNU
include $(ACE_ROOT)/include/makeinclude/rules.local.GNU