作者:混沌 八月 24th, 2008
原文出处:http://www.huihoo.com/forum/viewthread.php?tid=5654
作者:余涛(yut616_at_sohu.com)
由于安装说明文件“ACE- INSTALL.html”中提及的linux安装过程极少,其主要针对Unix、Windows,手动配置较多,加上本人安装后感觉“ACE- INSTALL.html”文件有些影响视听,因为主要的动作都可以由ACE包中的安装脚本ACE-install.sh自动完成,我们主要的工作就可以直接对这个安装脚本来处理即可。
1、安装环境:
linux 8.0
ACE安装包ACE+TAO+CIAO.tar.gz,
http://deuce.doc.wustl.edu/Download.html
http://download.dre.vanderbilt.edu/, "Latest Beta Kit",beta版既是ACE的最新版。
2、安装过程:
第一步
先设置ACE_ROOT环境,命令:
“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+TAO+CIAO.tar.gz包完全解开,特别强调不要完全解开,后面可以看到安装脚本会给我们解开它的;如果你手工解开全部,安装脚本将会将你的解压缩目录删除的!我们要做的事就只是将ACE+TAO+CIAO.tar.gz包中的ACE-install.sh安装脚本单独解出来,并对其修改。我们只要这一个文件就可以。
用 mkdir建目录,如/home/my/ACE,然后将你的 ACE+TAO+CIAO.tar.gz放在此目录下(用cp命令拷贝或mv命令移动到此目录)。注意这个目录将是你的一个存放 ACE+TAO+CIAO.tar.gz的目录,安装脚本会来这个目录找这个文件的,这个目录和ACE_ROOT是不一样的,且ACE- install.sh也提示不要将这两个目录设置成同一个目录。ACE_ROOT将是我们的安装目标目录。
从ACE+TAO+CIAO.tar.gz解压出单个文件ACE-install.sh:
“tar –zxvf ACE+TAO+CIAO.tar.gz ACE_wrappers/ACE-install.sh”
解好后,会出来一个新的子目录“ACE_wrappers”。此时可以先将ACE-install.sh移到外面的目录来:
“mv /ACE_wrappers/ACE-install.sh .”
“.”代表当前目录。当然ACE-install.sh在什么路径下是没什么影响的,因为我们要对ACE-install.sh的内容进行修改的,里面有很多路径要修改。
好,现在在/home/my/ACE就有了ACE-install.sh,我们现在用vi对其进行修改,修改前自己可以先备份一个。命令:
“cp ACE-install.sh ACE-install.sh.bak”
“vi ACE-install.sh”
我们可以看到缺省的,这个文件是用来在UNIX下做安装的。所以我们要将其中的有关UNIX的部分换成linux即可。
先找到“MY_ACEDIR=${HOME}/aceconfig”,将其改成“MY_ACEDIR=/home/my/ACE”,就是改成我们自己建的、放有ACE+TAO+CIAO.tar.gz文件的目录,之后去掉前面的注释“#”号。
接着在下面一点,找到“MY_ACE_CONFIG=config-sunos5.4-sunc++-4.x.h”,将其修改成“MY_ACE_CONFIG=config-linux.h”,即改成linux下的配置文件。
继续改,找到“MY_ACE_GNU_MACROS=platform_sunos5_sunc++.GNU”,将其改成“MY_ACE_GNU_MACROS=platform_linux.GNU”。这个是各种操作系统平台下的GNU宏文件设置。
好了,文件修改完毕,保存退出“:wq”。
第三步
我们的重点到了,现在就可以安装ACE了。
此时应该是在/home/my/ACE目录下,我们执行:
./ACE-install.sh
此后将是较长时间的解包、编译等待时间。这个过程将不会出现任何错误,因为安装脚本将为我们做很多事情,如:
生成config.h,生成platform_macros.GNU。
我们不需要按ACE-install.html中说的手工改东西:
不用做连接“ln -s config-sunos5-sunc++-4.x.h config.h”,安装脚本会给我们做好;(题外话:Windows中没有文件连接这一说,所以要自己生成一个config.h文件,再在它的里面加一句话“#include "ace/config-win32.h"”。)
不用做连接“ln -s platform_sunos5_sunc++.GNU platform_macros.GNU”。
如果编译中出现错误,如“../apps/gperf”等,请编辑$ACE_ROOT/apps下的Makefile,将其中的有关“gperf”的部分注释掉,这个东西只是一个例子,可以不去编译它。
强调一下,用ACE-install.sh来安装,会编译ACE、tests、apps等。最后会生成libACE.so及tests、apps下也会出来很多经过编译的文件。
当然如果你只是下载了ACE.tar.gz这样的单个包来安装,你可以手工改文件,再make,因为只编译ACE,工作就少了很多,手工做还可以接受。
第四步
我们来写个简单的例子看看ACE是不是能工作了。我们可以拿马维达(www.flyingdonkey.com)的“中篇:ACE程序员教程.pdf”中的生产者与消费者模式的例子来试试。这个程序是基于ACE_TASK的,多线程跑得很舒服 (代码在第5章中,大约是57页)。
我们想要编译这个hello.cpp例子,先要从一个ACE的例子目录中拷贝一份Makefile过来,这样编译方便。如我从$ACE_ROOT/examples/RMCast/Send_File下拷贝了它的Makefile。修改其中输出文件名“BIN = hello”,并修改“.obj/Sender.o .obj/Sender.so .shobj/Sender.o .shobj/Sender.so: Sender.cpp ”中后面的“Sender.cpp”成“hello.cpp”。后面的“Receiver.cpp”部分就删除掉。
好,我们可以编译一个我们自己的ACE程序了,make即可。应该能通过,生成执行文件hello,大小大约为250Kb。运行之,“./hello”,当生产者与消费者相互传递消息,运行信息不断输出时,看着还是蛮带劲的,呵呵。
大功告成,安装结束,谢谢阅读。
欢迎转载,但请写明出处。在此严重感谢superkun(superkun_at_sina.com)的大力帮助