在cygwin安装ace

解压

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呢, 很简单,那些平台太通用了,配置文件基本你就不用管,傻瓜型安装

设置环境变量ACE_ROOT

cyper@snnn /cygdrive/f/temp/ACE_wrappers $ export ACE_ROOT=pwd

在ACE_ROOT/ace/下创建config.h文件

cyper@snnn /cygdrive/f/Temp/ACE_wrappers/ace $ emacs ACE_ROOT/ace/config.h

写入

#include "ace/config-cygwin32.h"

创建platform_macros.GNU文件

在ACE_ROOT/include/makeinclude/platform_macros中创建platform_macros.GNU文件,写入

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]--> 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.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

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥