在 Debian Linux 下安装 ACE5.6 菜鸟攻略
本文作者 : 金蜗牛 Goldou
本文出处 :http://blog.csdn.net/goldou
声 明 : 本文可以不经作者同意 , 任意复制 , 转载 , 但任何对本文的引用都请保留文章的作者 , 出处以及声明信息 . 谢谢 !
引子
公司的 Linux 编译服务器因为共用的关系极不稳定, 于是决定自己搭建一个虚拟机 Debina Linux + ACE 的编译环境。安装好 Linux+SSH+SAMBA+GCC 之后,开始着手来搭建 ACE 的编译环境。
一、文件下载: http://download.dre.vanderbilt.edu/. 我下载的版本是 ACE-5.6.3.tar.gz 。
二、解压这个文件到某个文件夹。如: /home/wqh/ACE_wrappers 。
三 编译步骤参考 ACE 安装指南中的“ Using the Traditional ACE/GNU Configuration “,按此方法:使用传统的 make 方式,亦步亦趋,编译成功。简要的总结一下其步骤:
- 确认你的系统上已经安装了 GNU make 软件包。如果没有,安装 3.79.1 或更高的版本。这个当在 Debian Linux 下安装 GNU GCC 软件包的时候,已经默认安装了。
2 .在系统的配置文件中,添加关于 ACE 的环境变量。包括:
1) ACE 源文件树所在的目录,比如我的机器上是 /home/wqh/ACE_wrappers 。通常用一个自定义的环境变量 ACE_ROOT 来表示。
2) ACE 编译后生成动态链接库所在的目录。通常是在标准路经 (/lib, /usr/lib) 中。但对于非标准库,系统通常用保留的环境变量 - LD_LIBRARY_PATH 用来保存非标准共享库的路径。
3) 环境变量添加方法有三种:
3.1 )在 shell 中,导入环境变量。
3.2 )在 个人 home 目录下的 .bash_profile 里设置
3.3 ) /etc/profile ,此文件为系统的每个用户设置环境信息 , 当用户第一次登录时 , 该文件被执行 . 最简单和有效的方式是写入 /etc/profile 中建议使用第三种方式。以 root 的身份修改文件:
# vim /etc/profile
在文件末尾添加 4 行:
ACE_ROOT=/home/wqh/ACE_wrappers
export ACE_ROOT
LD_LIBRARY_PATH=$ACE_ROOT/ace:$ACE_ROOT/lib:/usr/local/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
并使这些环境变量生效(运行 source 或者重新登陆)。
3. 新建一个配置文件 config.h ,放置位置 $ACE_ROOT/ace/ 。在 Linux 下编译, $ACE_ROOT/ace/config.h 文件应该包含 :
#include "ace/config-linux.h"
4. 新建一个编译配置文件, $ACE_ROOT/include/makeinclude/platform_macros.GNU ,文件内容是:(注意没有 # 号)
include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU
5. 切换到 $ ACE_ROOT 目录下,使用 make 命令编译:
make
6. 经过漫长的等待,不出意外的话, $ ACE_ROOT/lib 下顺利生成了动态库。主要有 libACE.so , libACE.so.5.6.3 。为了保险起见,我还把这两个文件拷贝到了目录 /usr/lib 下。
通过以上步骤, ACE 的动态链接库已经顺利被编译出来。
四、最后,写一个简单的程序测试一下 ACE
迫不及待的使用了一个 ACE 的程序来验证编译的正确性,结果出现问题:
debian:/home/wqh/ACETest# g++ -o cli -lACE ACEClient.cpp
In file included from ACEClient.cpp:11:
/home/wqh/ACESource/ACE_wrappers/ace/INET_Addr.h:15:26: error: ace/pre.h: No such file or directory
……………
看来是编译器找不到 ACE 的头文件的位置。换个命令试一下:
g++ -o cli ACEClient.cpp -I$ACE_ROOT -I./ -L$ACE_ROOT/ace -lACE -ldl -lnsl
使用这一个编译命令,编译通过。再没有扰人的“ NO SUCH FILE… “的问题。困扰两天的问题终于算告一段落了。
g++ -o cli ACEClient.cpp -I$ACE_ROOT -lACE
这样也可以。原来是头文件路径没有设置好。
-----------------------------------------------------------------------------------------------------------------------------
ace.pc setup file
prefix=/usr/include/ace
exec_prefix=${prefix}
libdir=/usr/lib
includedir=${prefix}
Name: ace
Description: ACE Utility Library
Version: 5.7.1
Libs: -L${libdir} -lACE
Cflags: -I${includedir}
-----------------------------------------------------------------------------------------------------------------------------
Profile setup file
#ACE_ROOT=/home/ace5.7.1/ACE_wrappers
ACE_ROOT=/usr
export ACE_ROOT
LD_LIBRARY_PATH=$ACE_ROOT/include/ace:$ACE_ROOT/lib:/usr/local/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH