来源:http://www.linuxidc.com/Linux/2009-03/18942.htm
最近打算开始学习Linux下的C++程序开发,经过几天的搜索,发现ACE这套框架不错,最主要的是能够跨平台。不过在安装的过程中还是走了不少的弯路,在此记录下来。一、下载安装包
下载地址:http://download.dre.vanderbilt.edu/
由于我只需要使用ACE,因此我只下载了ACE.tar.gz
二、安装前的配置
首先把文件解压,我解压在了/Software文件夹下,解压后会出现一个名字为ACE_wrappers的文件夹。这样所有ACE的源文件都在/Software/ACE_wrappers里面
配置环境变量:
# vi /etc/profile
增加如下的内容
ACE_ROOT=/Software/ACE_wrappers ------就是上面存放ACE源文件的目录
export ACE_ROOT
LD_LIBARY_PATH=$ACE_ROOT/ace:$LD_LIBARY_PATH
export LD_LIBARY_PATH
# source /etc/profile
三、开始安装ACE
# cd /Software/ACE_wrappers
# vi ace/config.h
增加如下信息:
#include “ace/config-linux.h”
如果想用MSVC标准C++头,则需要在ace/config.h中增加定义:
#define ACE_HAS_STANDARD_CPP_LIBARY 1
我的config.h文件内容如下:
#define ACE_HAS_STANDARD_CPP_LIBARY 1 // 使用标准C++头
#define ACE_NO_INLINE // 不使用内连函数,能减小LIB和EXE的大小
#include “ace/config-linux.h”
保存后退出
# mkdir build ----新建一个build文件夹
# cd build
# ../configure
--prefix=/usr/local/ACE
-------在这里我指定了ACE的安装路径
# make & install
可以去泡杯咖啡慢慢等
四、配置ACE环境
# vi /etc/ld.so.conf.d/ace.conf
在文件中增加如下信息:
/usr/local/ACE/lib
# ldconfig
五、测试ACE环境是否安装配置成功
编写一个简单的ACE程序,在这里我就用最简单的Hello World了,代码如下:
#include
#include
using namespace std;
int ACE_TMAIN(int argc, ACE_TCHAR *argv[])
{
ACE_DEBUG((LM_DEBUG, ACE_TEXT(“Hello World!”)));
return 0;
}
编译:
# g++ -I/usr/local/ACE/include -O0 -g3 -Wall -c -fmessage-length=0
-MMD -MP -MF"HelloWorld.d" -MT"HelloWorld.d" -o"HelloWorld.o"
"HelloWorld.cpp"
链接:
# g++ -I$ACE_ROOT -L/usr/local/ACE/lib -o"ACETest" ./HelloWorld.o
-lACE -lrt –lpthread
注意:在链接的时候,必须要加-lACE –lrt -lpthread三个参数,否则会报错。
执行:
# ./ACETest
成功执行的话,会打印出Hello World
ubuntu下可以直接通过如下命令进行安装
sudo apt-get install libace-dev libace-doc
openssl安装
需要下载openssl源码,如openssl- 0.9.8b.tar.gz,放到unix下去编译:
./config
make
make install
然后继续编译ace。
这时又会在链接时碰到很多错误:
:
client-SSL-client.o: In function
`ACE_SSL_SOCK_Stream::close()':
../../../../ace/SSL/SSL_SOCK_Stream.i:278: undefined reference to
`SSL_shutdown'
../../../../ace/SSL/SSL_SOCK_Stream.i:280: undefined reference to
`SSL_get_error'
../../../../ace/SSL/SSL_SOCK_Stream.i:289: undefined reference to
`SSL_clear'
:
:
解决方法是,在openssl的编译环境下找到libssl.a、libcrypto.a,让编译程序连接进去。
具体操作是
编辑 /ace-
5.5/ACE_wrappers/build/examples/IPC_SAP/SSL_SAP/Makefile和
/ace- 5.5/ACE_wrappers/build/tests/SSL/Makefile这两个文件,在里面找到"LIBS =
-lrt -ldl" 这一项,将其修改为:
LIBS = -lrt -ldl /openssl- 0.9.8/openssl- 0.9.8b/libssl.a
/openssl- 0.9.8/openssl- 0.9.8b/libcrypto.a
然后继续编译。问题即可解决。
上面的ace和openssl的路径以你实际存放的路径为准