当前位置:   article > 正文

运行时报 symbol lookup error: xxx.so: undefined symbol: 原因分析

symbol lookup error

linux程序编译的时候没有问题,在运行的时候报 symbol lookup error: xxx.so: undefined symbol:

使用ldd -r xxx.so查看,可以看到跟运行时报错类似的信息:

出现这个问题的原因很多,这里只是记录我遇到的两个情况分析:

场景一:

程序A调用了so B,so B调用了 so C,so B里调用 so C的地方,是模板函数里,而我把模板函数的定义放到了.cpp文件,由于在编译阶段并不对模板函数进行实例化,从而导致 so B 并没有真正链接so C,导致运行时找不到so C的符号表。

解决方法是把 so B 中 调用 so C 的模板函数的定义放到.h文件。

血的教训:模板函数的定义尽量放在.h文件,不要放到.cpp文件中。

场景二:

定义了一个单例类,在类的定义里显示地声明了类的构造函数、析构函数,但是没有对构造函数和析构进行定义。

由于在其他cpp中调用单例的时候是通过get_instance的方式,没有构造对象的过程,因此编译的时候没有报错,但是在运行的时候报了 undefined symbol。

教训:类定义时显示地声明构造函数、析构函数的时候,一定要记得进行相应的定义!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/185132
推荐阅读
相关标签
  

闽ICP备14008679号