Chinaunix

标题: 一个我觉得很蹊跷的事情 [打印本页]

作者: karl412    时间: 2007-06-11 14:21
标题: 一个我觉得很蹊跷的事情
下面是我写的一个shell脚本 很简单 就是到一个目录下 执行make
但是我发现一个问题:
如果是我手动make完一个模块后,执行可执行文件,什么问题都没有
但是我使用下面这个shell脚本自动编译完成后,执行可执行文件时就会报错:

Dependent module libexpat.a(libexpat.so.1) could not be loaded
Cannot load module libexpat.a(libexpat.so.1)


觉得非常蹊跷 同样是make 只不过一个是手动cd到一个目录然后敲入make进行编译
一个是自动跳到一个目录然后自动编译 为什么一个有错 一个没错呢?
是不是有什么shell编程的机制我还不明白?


  1. #!/usr/bin/sh
  2. # Written by karl412 on 2007-06-10
  3. # auto-make all modules

  4. MPPSRC_DIR=/home/mpp/src.work

  5. mppd_make() {
  6.         echo "\n+++++++++++++++++++MPPD+++++++++++++++++++++\n"
  7.         cd $MPPSRC_DIR/mppd
  8.         make clean;make
  9. }

  10. mppcrond_make() {
  11.         echo "\n+++++++++++++++++++MPPCROND+++++++++++++++++++++\n"
  12.         cd $MPPSRC_DIR/mppcrond
  13.         make clean;make
  14. }

  15. err_msg() {
  16.         if [ $? != 0 ]
  17.         then
  18.                 echo "\n++++++++++++++There is something wrong in $1++++++++++++\n"
  19.                 exit
  20.         fi
  21. }

  22. # Shell  Begin
  23. if [ $# != 1 ]
  24. then
  25.         echo "[Usage]: make.sh module_name"
  26.         echo "[ Note]: if module_name is 'all', then compile all modules "
  27.         exit
  28. fi

  29. case $1 in
  30. mppd )
  31.         mppd_make; err_msg "MPPD"
  32.         exit;;
  33. mppcrond )
  34.         mppcrond_make; err_msg "MPPCROND"  
  35.         exit;;
  36. all )
  37.         mppd_make; err_msg "MPPD"
  38.         mppcrond_make; err_msg "MPPCROND"
  39.         exit;;
  40. esac
复制代码

作者: karl412    时间: 2007-06-11 14:45
我用的是sh
AIX默认的是ksh
这个或许会影响到环境变量的定义
是不是这个原因呢?
作者: tommy2004    时间: 2007-06-11 15:02
原帖由 karl412 于 2007-6-11 14:21 发表
下面是我写的一个shell脚本 很简单 就是到一个目录下 执行make
但是我发现一个问题:
如果是我手动make完一个模块后,执行可执行文件,什么问题都没有
但是我使用下面这个shell脚本自动编译完成后,执行可执行 ...



你运行这个脚本的时候有没有用. ./ufile ?还是./ufile ?
如果是./ufile 运行后,cd到哪个目录环境变量就不能传到父进程了,必须要. ./ufile才行.
作者: karl412    时间: 2007-06-11 16:58
问题似乎解决了

原因是我在Makefile中 定义MYLIBPATH=../lib

如此定义变量 只能在当前目录下才能执行可执行文件(这个是在AIX下才发现的问题,在LINUX下没有这个问题)




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2