程序在运行阶段出现“ 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)

Logo

基于 Vue 的企业级 UI 组件库和中后台系统解决方案,为数万开发者服务。

更多推荐