阅读提示:

本文已过时。

对于习惯了“三板斧”的 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