日历

« 2008-07-24  
  12345
6789101112
13141516171819
20212223242526
2728293031  

RSS订阅

永远把艰辛的付出看作是生命的必要; 即使没有收获的指望,也心平气静地继续耕种!

ACE简介

2008-04-18 13:56:17 / 个人分类:学习日记

ACE 全称是 ADAPTIVE Communication Environment, 其中 ADAPTIVE 的全称是 A Dynamically Assembled Protocol Transformation, Intergration, and eValuation Environment, 它是一个非常优秀的工具包, 可以用于构建高性能、 跨平台的网络应用, 本文介绍了在 WindowsLinux 下安装 ACE 的方法。
@f$J3c-H!a0

1 ACE 的编译

在正式开始使用 ACE 之前, 我们必须先编译 ACE。 首先到 ACE 的官方站点 下载 ACE 的源码包, 然后解压到一个你喜欢的目录, 为编译做好准备。

1.1 Linux 下的编译

对于习惯了“三板斧”的 Linux 用户而言, 解压 ACE 后发现的第一个问题一定是: 居然没有熟悉的 configure! 是的, ACE 没有使用 autoconf。

首先, 我们需要设置 $ACE_ROOT 环境变量, 把该环境变量指向你解压 ACE 后得到的最上层目录, 如果你把 ACE 解压到了其它目录, 请修改下面提到的路径。

$ export ACE_ROOT=/src/ACE_wrappersLUPA开源社区il5_U.p/M)[&O(B:I!f8d4z

接下来, 我们进入 $ACE_ROOT/ace 目录, 创建一个文本 config.h, 内容如下:

#include "ace/config-linux.h"
m#Vsb |w M0

然后, 我们进入 $ACE_ROOT/include/makeinclude 目录, 创建一个文本文件 platform_macros.GNU, 内容如下:

include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU
5B8at5C!Z5FZ/DVQ0

然后回到 $ACE_ROOT 目录, 执行 make

编译过程执行到中途的时候会出错, 那是因为 ACE 库中的部分代码需要通过一个代码生成器来生成, 而令人发指的一点是该代码生成器居然依赖 ACE 的库, 而此时 ACE 的库却还没有安装。 没关系, 虽然整个 ACE 还没有编译完, 但它依赖的 libACE.so 却已经准备好了。 切换到 root 下把 libACE.so.5.4.8 (如果你安装的 ACE 源码库与我的版本不一致, 这个数也可能是别的) 复制到 ldconfig 能找到的路径下, 如 /usr/lib/usr/local/lib 下, 执行 ldconfig 刷新系统库列表, 然后删除 $ACE_ROOT/apps/gperf/tests/cpp.cpp, 最后重新运行 make, 经过漫长地等待后, ACE 就编译好了。

为了方便使用, 我们可以把 $ACE_ROOT/lib 下的内容复制到 /usr/lib/usr/local/lib 下, 可以使用滇狐编写的这段脚本复制共享库, 命令行为:./install.sh /usr/local/lib

#!/bin/shLUPA开源社区a|h1Vk.w
d5L!B
# Please place this file at $(ACE_ROOT)LUPA开源社区lpN%Iz$Fi+w
LUPA开源社区o+b"sA@ Z1I:Eomi`7m
if (test $# -lt 1) then
0AE-K y ~^)q0 echo 'Usage: install.sh <target directory>'
0|\(N.cBy*L+C3K0elseLUPA开源社区]%E b L].J
pushd $1LUPA开源社区L3N2W o*?0j"r
for file in $ACE_ROOT/lib/*LUPA开源社区c2kTz!W MG
doLUPA开源社区 _Y+[_6P-Aq
realname=`readlink $file`
EWxcM)e:U0e0 ln -s `basename $realname` `basename $file`
,i:g$I:w+cyA*^0 cp --remove-destination $realname .
'L.z;]`%Bstk0 done
3CGVaS%E;a)r n0 popdLUPA开源社区5f)wu+pu$n+[vR)B
fi
?'Q#O0z:OL\%N0

1.2 使用 MinGW + MSys 在 Windows 下的编译

为了在 Windows 下编译 ACE, 我们必须先安装一份 MinGW 和 MSys, 这两个软件都可以到 MinGW 的官方站点 免费下载。 使用昂贵的 Visual Studio 编译 ACE 的方法我们这里不再进行讨论。

首先安装 MinGW, 然后再安装 MSys, 安装完毕后, 将 ACE 的源码包解压到某个目录, 然后打开 MSys 控制台, 切换到 ACE 所在的路径。 注意, MSys 使用的路径表示方式与 Windows 不大一样, 它使用正斜杠“/”作为路径分隔符, 并且把驱动器名看做根目录下的文件夹。 例如, 我把 ACE 解压到 E:\ACE_wrapper 下, 在 MSys 中的写法是:/e/ACE_wrapper。 设置 $ACE_ROOT 环境变量, 把该环境变量指向你解压 ACE 后得到的最上层目录, 如果你把 ACE 解压到了其它目录, 请修改下面提到的路径。

$ export ACE_ROOT=/e/ACE_wrapper
oP J4^,m]nK{0

接下来, 我们进入 $ACE_ROOT/ace 目录, 创建一个文本 config.h, 内容如下:

#include "ace/config-win32.h"LUPA开源社区?X~ a2[I:b+V*P"M

切记! 虽然该目录下有一个 config-win32-mingw.h, 但这里不要使用它, 否则编译时会出错!

然后, 我们进入 $ACE_ROOT/include/makeinclude 目录, 创建一个文本文件 platform_macros.GNU, 内容如下:

include $(ACE_ROOT)/include/makeinclude/platform_mingw32.GNULUPA开源社区;@
sGZp1QD
G#c1}

然后回到 $ACE_ROOT 目录, 执行 make, 经过漫长地等待后, ACE 就编译好了。 我不记得 Windows 下是否出现过 Linux 下类似的提前依赖 ACE 库的事件, 而我现在手头上没有 Windows, 如果你遇到类似的问题的话, 参照 Linux 下编译的方法进行处理。

需要注意的一点是, 安装 MSys 时, 它会把你的 MinGW 中的 make.exe 改名为 mingw32-make.exe, 这样在编译的时候便会使用 MSys 中被包装过的 make.exe, 以便正常识别 Unix 风格的路径名。 当编译完毕后, 为了能够正常使用 MinGW, 请把被修改的文件名改回来。 当然, 在再次使用 MSys 的时候, 记得再将 make.exe 改名。


相关阅读:

TAG: 学习日记

我来说两句

-5 -3 -1 - +1 +3 +5

Open Toolbar