ACE在Linux环境下的编译安装
[Author by Jet Yan in April 4,2005]
第一步 设置ACE_ROOT环境变量
(1)export ACE_ROOT=/home/jet/ACE_wrappers
export LD_LIBRARY_PATH=$ACE_ROOT/ace:$LD_LIBRARY_PATH
(2)或者直接在用户目录下编辑.bashrc文件,内容如下:
ACE_ROOT=/home/jet/ACE_wrappers
export ACE_ROOT
LD_LIBRARY_PATH=$ACE_ROOT/ace:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
然后重新登陆
(3)另一种方法是修改系统的/etc/profile文件(不过这样还是以用户变量为
优先设置,即如果已经按照上面的两种方法进行了设置,那么以下的设置将不
会被系统采用。)
“vi /etc/profile”
在其中加入4行
ACE_ROOT=/opt/ACE
export ACE_ROOT
LD_LIBRARY_PATH=$ACE_ROOT/ace:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
我是加在“export PATH USER….”后的。完成后将/etc/profile执行一次,命令:
“chmod 555 /etc/profile”
“/etc/profile”
这样我们的ACE_ROOT就设置好了,可以用如下命令查看ACE_ROOT是否设置好了:
“echo $ACE_ROOT”
这个时候最好reboot启动一次linux。
-------------------------------------------------------------------
第二步 解压出ACE-install.sh文件并修改
(1)在/home/jet下建立子目录ACEInstall,将ACE.tar.gz上传至该目录
(2)从ACE.tar.gz解压出单个文件ACE-install.sh:
tar –zxvf ACE.tar.gz ACE_wrappers/ACE-install.sh
(3)ACE-install.sh放在哪个目录下无所谓,因为安装目录是由刚才设定的$ACE_ROOT决定的。
(4)vi ACE-install.sh
我们可以看到缺省的,这个文件是用来在UNIX下做安装的。所以我们要将其中的有
关UNIX的部分换成linux即可。
“MY_ACEDIR=${HOME}/aceconfig” -->> “MY_ACEDIR=/home/my/ACE”
“MY_ACE_CONFIG=config-sunos5.4-sunc++-4.x.h” -->> “MY_ACE_CONFIG=config-linux.h”
“MY_ACE_GNU_MACROS=platform_sunos5_sunc++.GNU” -->> “MY_ACE_GNU_MACROS=platform_linux.GNU”
好了,文件修改完毕,保存退出“:wq”。
-------------------------------------------------------------------
第三步 运行ACE-install.sh(shell脚本)安装ACE
(1)当前目录/home/jet/ACEInstall/ACE_wrappers
(2)修改ACE-install.sh的属性,使其可执行
chmod 777 ACE-install.sh
(3)执行:
./ACE-install.sh
此后将是较长时间的解包、编译等待时间。这个过程将不会出现任何错误,因为安装脚本
将为我们做很多事情,如:生成config.h,生成platform_macros.GNU。(即使出现删除
文件的错误,对结果应该没有影响,遇到这种情况要具体分析一下。)
因此就不需要按ACE-install.html中说的那样手工做如下改动:
在$ACE_ROOT/ace目录下:
ln -s config-linux.h config.h
在$ACE_ROOT/include/makeinclude/目录下:
ln -s platform_linux.GNU platform_macros.GNU
(Windows中没有文件连接这一说,所以要自己生成一个config.h文件,再在它的里面加一
句话“#include "ace/config-win32.h"”。)
(4)如果编译中出现错误,如“../apps/gperf”等,请编辑$ACE_ROOT/apps下的Makefile,
将其中的有关“gperf”的部分注释掉,这个东西只是一个例子,可以不去编译它。
强调一下,用ACE-install.sh来安装,会编译ACE、tests、apps等。
最后会生成libACE.so及tests、apps下也会出来很多经过编译的文件。
当然如果你只是下载了ACE.tar.gz这样的单个包来安装,你可以手工改文件,再make,
因为只编译ACE,工作就少了很多,手工做还可以接受。
(5)编译过程日志放在/tmp/myacemaker.err
-------------------------------------------------------------------
第四步 直接测试ACE提供的例子
(1)在$ACE_ROOT/examples/Synch中,修改proc_sema.cpp文件如下:
#include "ace/OS_NS_stdio.h"
在main函数中
ACE_OS::printf("Hello,World! \n");
(2)执行make,OK后运行。
(3)如果运行时装在不到share object,可能是lib路径问题,因为.so文件是程序运行过程中
装载的,不是在编译的时候,因此要设置LD_LIBRARY_PATH:
[jet@S]$ export LD_LIBRARY_PATH=/home/jet/ACE_wrappers/lib:$LD_LIBRARY_PATH
-------------------------------------------------------------------
第五步 写一个简单的程序测试一下ACE
(1)在/home/jet/下新建ACETest子目录,写好程序如client.cpp,上传到该目录
(2)拷贝第四步的那个Makefile文件到该目录,并做如下修改
修改其中输出文件名“BIN = hello”,并修改“
.obj/proc_sema.o .obj/proc_sema.so .shobj/proc_sema.o .shobj/proc_sema.so: proc_sema.cpp \”
中后面的“proc_sema.cpp”成“client.cpp”。
好,我们可以编译一个我们自己的ACE程序了,make即可。应该能通过,生成执行文件client,
大小大约为112Kb。运行之,“./client”。
-------------------------------------------------------------------
=================================================
另一种更为直接的安装方法:
步骤1:设置环境变量
export ACE_ROOT=/home/jet/ACE_wrappers
export LD_LIBRARY_PATH=$ACE_ROOT/ace:$LD_LIBRARY_PATH
也可以直接修改.bashrc文件,以免退出后设置的这些变量消失
[env][echo $ACE_ROOT]
步骤2:
针对不同版本创建两个文件链接:
在$ACE_ROOT/ace目录下:
ln -s config-linux.h config.h
在$ACE_ROOT/include/makeinclude/目录下:
ln -s platform_linux.GNU platform_macros.GNU
步骤3:
在$ACE_ROOT目录下,新建一个目录,用以执行configure的结果
mkdir aaa
cd aaa
在$ACE_ROOT/aaa中运行
../configure
在确认结果无误后,执行
make
OK!
[rm -f -r *]删除目录下所有的文件和子目录-f是强制force删除,-r是代表目录也删除
[ldd 可执行文件] 显示该文件运行时候需要的动态链接库
[ipcs] 显示系统的共享内存、信号量、消息队列的情况 ipc show
[ipcrm <shm| msg| sem> id]