“symbol lookup error”

程序在运行阶段出现“ symbol lookup error, undefined symbol: _ZN14FaceFeatureAppC1Ev”,首先需要明白出现了什么问题,出现未定义的符号,而且现在已经处于编译通过执行可执行程序的阶段,说明编译链接都没有问题,不过现在执行的时候在去加载实现“FaceFeatureApp”函数的动态库的时候出现问题,此时首先去确认此函数是在哪个库中实现,有两种可能的情况,第一就是实现此函数的动态库就没有找到,其次就是找到了实现此函数的动态库,但是此动态库和编译时候指定的那个动态库有一点区别,找到的这个动态库中并没有实现此函数。解决的方案如下。如果可以直接找到可执行程序执行的时候加载的那个动态库,则直接利用可执行程序编译指定的动态库去替换,此方案是最合适的方案。如果不好找的话就利用export $LD_LIBRARY_PATH去查看系统查找动态库的路径,把你编译可执行程序生成的此函数的动态库放到里面,此方案一般可以解决问题。总结下来步骤如下。

<1> 利用 c++flit _ZN14FaceFeatureAppC1Ev 查找这个符号对应的是那个函数,

<2>利用找到的函数,查看相应的目录去查看对应的动态库,找到编译的时候对应的动态库位置

<3>去可执行程序运行的地方,查找运行时候链接的动态库 (locate xxx.so)替换此库

<4> 如果第三步不好使的时候,先查看系统默认的动态库的加载的位置,(echo $LD_LIBRARY_PATH),查看系统默认的动态库的加载路径里面是否包含此共享库, 有则替换掉没有则放到其中一处。或者把编译时候的动态库的路径加入到LD_LIBRARY_PATH( export LD_LIBRARY_PATH=../.:$LD_LIBRARY_PATH)

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值