关于"symbol lookup error"问题的诡异现象,高手帮忙解释解释

huofen2005 2010-12-10 10:33:38
我写了一个demon程序,启动的时候需要设置一大堆环境变量:PATH,LD_LIBRARY_PATH,。。。~~~
所以我写了一个启动脚本clidemon_omp_start.sh来设置环境变量并启动这个demon:

#setup the env
export PATH="${PATH}:/sbin:/bin:/usr/sbin:/usr/bin"
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib:/usr/sfw/lib:/usr/app/lib/"
export NMS_CONFIG="/usr/app/lte_cli/conf/conf.xml"
# kick off the demon
/usr/app/bin/clidemon_omp


一开始的时候,我是在inittab里面执行这个启动脚本的:

# Start the ISCLI omp demon
clio:3:once:/usr/app/bin/clidemon_omp_start.sh -r

demon能够正常运行,测试也都ok了!

后来,需要把demon纳入到另一个应用来管理,就把启动机制修改了。。。没想到一直起不来!
然后我就手工在bash里面调用这个启动脚本,也出现了个错误:
root@hapWibbSc2:/usr/app/bin# ./clidemon_omp_start.sh
[clidemon_omp_start.sh] cli_dispatcher detecting...
[clidemon_omp_start.sh] cli_dispatcher detected, kick off clidemon_omp.
/usr/app/bin/clidemon_omp: symbol lookup error: /usr/app/lte_cli/lib/libapp_fmwk.so: undefined symbol: _ZN7pcrecpp2RE6no_argE

一般 LD_LIBRARY_PATH 没设置会引起类似错误,但我这个设置对了的,libpcrecpp.so是在"/usr/local/lib"下面~ 并且当我再次改成用 inittab 来启动时,又是正常启动的! 如果是环境变量设置错误,应该也起不来才对!

Inittab方式启动这个demon为啥能够避开这个错误正常启动起来?
...全文
3112 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
benge1986 2012-10-22
  • 打赏
  • 举报
回复
顶楼主,受益匪浅
justkk 2010-12-10
  • 打赏
  • 举报
回复
你可以对比一下两种启动方式中 LD_LIBRARY_PATH 环境变量的区别
huofen2005 2010-12-10
  • 打赏
  • 举报
回复
恩~ 这个是可以,不过应用比较多,不允许这么追加!
有一点比较值得关注的是那个符号不是我的应用直接引用的:
clidemon_omp -1-> libapp_fmwk.so -2-> libpcrecpp.so

如果在步骤1上面出现符号找不到,那应用确实应该起不来!
但我看到有个帖子上讲,在步骤2上符号缺失貌似是可以的。
我把帖子链结加上:
http://blog.csdn.net/univmercury/archive/2010/04/13/5482020.aspx

这句是亮点:
There shouldn't be any undefined symbols for an executable, but there will be for a shared lib if it depends on another shared lib.

有谁研究过这个,帮忙解释解释?
steptodream 2010-12-10
  • 打赏
  • 举报
回复
你直接把
/usr/local/lib
/usr/sfw/lib
/usr/app/lib/
这三个路径直接追加到/etc/ld.so.conf里 然后执行ldconfig命令
应该就不用设置LD_LIBRARY_PATH了

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧