日期:2014-05-16  浏览次数:20815 次

关于"symbol lookup error"问题的诡异现象,高手帮忙解释解释
我写了一个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为啥能够避开这个错误正常启动起来?

------解决方案--------------------
你直接把
/usr/local/lib
/usr/sfw/lib
/usr/app/lib/
这三个路径直接追加到/etc/ld.so.conf里 然后执行ldconfig命令
应该就不用设置LD_LIBRARY_PATH了
------解决方案--------------------
你可以对比一下两种启动方式中 LD_LIBRARY_PATH 环境变量的区别