Google
 
2006-06
24

ACE+TAO INSTALL

Filed under: Tech articles — admin @ 4:00 pm

The following text is from other friends BLOG. I installed my ACE package(ACE_5.5+TAO_1.5.tar.gz) according the article. But when I take “make” procedure, I encounter the error “/usr/bin/ld: can not find -mysqlclient”. The error indeed kicked my head at the desk. After I searched the Internet I found a way to solve it.

Problem 1: While running make for Open Diameter following error may be encountered:

        /usr/bin/ld: cannot find -lACE_SSL

To overcome this error, copy all the files in $ACE_ROOT/lib to /usr/lib directory

Problem 2: In case of compilation error, header files com_err.h, krb5.h and profile.h may need to be copied from /usr/kerberos/include/ to /usr/include/

Now I knew the reason. IT s caused by LD lib path . I searched it from INTERNET again. I got the following:

在Linux下,大部分系统的library库被安装在/usr/lib目录下。只有一些
基本的共享库被安装在/lib目录下。例如:libc.so,libcurses.so,libm.so
,libtermcap.so(各个版本对应的文件会有些不同),在其他部分被mount上
之前,那些文件是启动Linux系统所必须的。连接器默认的搜索路径是
/lib,/usr/lib,/usr/local/lib。

环境变量LD_LIBRARY_PATH列出了查找共享库时除了默认路径之外的其他路径。
/etc/ld.so.conf文件则指出了程序ldconfig要搜索的目录。该程序将这些目录中所有的
共享库都存储到/etc/ld.so.cache中。假如共享库已经被从默认的目录中
移走,Linux ELF动态连接库将在/etc/ld.so.cache文件中找该共享库。

手册里说的 make -C ld clean ,然后 make -C ld LIB_PATH=/tools/lib
应该就是修改默认的库的路径了。

I donnnot know its correct or not. But I understand why.

 

第一步 设置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 �Czxvf 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 id]

Tags: ,

Related posts

No Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

40 queries. 0.316 seconds. Powered by WordPress
沪-ICP备07003363号 Stat.