免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1478 | 回复: 3
打印 上一主题 下一主题

一个我觉得很蹊跷的事情 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 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
复制代码

论坛徽章:
0
2 [报告]
发表于 2007-06-11 14:45 |只看该作者
我用的是sh
AIX默认的是ksh
这个或许会影响到环境变量的定义
是不是这个原因呢?

论坛徽章:
0
3 [报告]
发表于 2007-06-11 15:02 |只看该作者
原帖由 karl412 于 2007-6-11 14:21 发表
下面是我写的一个shell脚本 很简单 就是到一个目录下 执行make
但是我发现一个问题:
如果是我手动make完一个模块后,执行可执行文件,什么问题都没有
但是我使用下面这个shell脚本自动编译完成后,执行可执行 ...



你运行这个脚本的时候有没有用. ./ufile ?还是./ufile ?
如果是./ufile 运行后,cd到哪个目录环境变量就不能传到父进程了,必须要. ./ufile才行.

论坛徽章:
0
4 [报告]
发表于 2007-06-11 16:58 |只看该作者
问题似乎解决了

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

如此定义变量 只能在当前目录下才能执行可执行文件(这个是在AIX下才发现的问题,在LINUX下没有这个问题)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP