ACE 的编译
在正式开始使用 ACE 之前, 我们必须先编译 ACE。 首先到 ACE 的官方站点 下载 ACE 的源码包, 然后解压到一个你喜欢的目录,为编译做好准备。
1.1 Linux 下的编译
对于习惯了“三板斧”的 Linux 用户而言, 解压 ACE 后发现的第一个问题一定是:居然没有熟悉的 configure! 是的, ACE 没有使用 autoconf。
首先, 我们需要设置 $ACE_ROOT
环境变量, 把该环境变量指向你解压 ACE 后得到的最上层目录, 如果你把 ACE 解压到了其它目录, 请修改下面提到的路径。
$ export ACE_ROOT=/src/ACE_wrappers
接下来, 我们进入 $ACE_ROOT/ace
目录, 创建一个文本 config.h
,内容如下:
#include "ace/config-linux.h"
然后, 我们进入 $ACE_ROOT/include/makeinclude
目录, 创建一个文本文件 platform_macros.GNU
, 内容如下:
include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU
然后回到 $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/sh
# Please place this file at $(ACE_ROOT)
if (test $# -lt 1) then
echo 'Usage: install.sh <target directory>'
else
pushd $1
for file in $ACE_ROOT/lib/*
do
realname=`readlink $file`
ln -s `basename $realname` `basename $file`
cp --remove-destination $realname .
done
popd
fi
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
接下来, 我们进入 $ACE_ROOT/ace
目录, 创建一个文本 config.h
,内容如下:
#include "ace/config-win32.h"
切记! 虽然该目录下有一个 config-win32-mingw.h
, 但这里不要使用它,否则编译时会出错!
然后, 我们进入 $ACE_ROOT/include/makeinclude
目录, 创建一个文本文件 platform_macros.GNU
, 内容如下:
include $(ACE_ROOT)/include/makeinclude/platform_mingw32.GNU
然后回到 $ACE_ROOT 目录, 执行 make
, 经过漫长地等待后, ACE 就编译好了。 我不记得 Windows 下是否出现过 Linux 下类似的提前依赖 ACE 库的事件, 而我现在手头上没有 Windows, 如果你遇到类似的问题的话,参照 Linux 下编译的方法进行处理。
需要注意的一点是, 安装 MSys 时, 它会把你的 MinGW 中的 make.exe
改名为 mingw32-make.exe
, 这样在编译的时候便会使用 MSys 中被包装过的 make.exe
, 以便正常识别 Unix 风格的路径名。当编译完毕后, 为了能够正常使用 MinGW, 请把被修改的文件名改回来。当然, 在再次使用 MSys 的时候, 记得再将 make.exe
改名。