博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
so库又一次遇到 undefined symbol------ldd, nm, c++filt命令大显身手
阅读量:4142 次
发布时间:2019-05-25

本文共 1402 字,大约阅读时间需要 4 分钟。

       最近发版本, 灰度发布的时候, 发现进程没来, 回包自然是异常的。 立即进行版本回退, 发现OK. 

       哪里出问题了呢? 直接ldd -r libtest.so一下, 就知道了, 原来是缺符号。 看看简化后的示例代码:

 

#include 
using namespace std;class Test{public: void output(); };#if 0void Test::output(){ cout << "output is celled" << endl;}#endifvoid fun(){ Test T; T.output();}

      先编译成test.o, 然后编译成libtest.so,  不会有编译问题, 但如果其他模块来加载libtest.so, 就会有问题。 libtest.so为什么会有问题呢? 因为没有符号啊, 看看:

 

 

xxxxxx:~> ldd -r libtest.so undefined symbol: _ZNSt8ios_base4InitC1Ev       (./libtest.so)undefined symbol: _ZNSt8ios_base4InitD1Ev       (./libtest.so)undefined symbol: _ZN4Test6outputEv     (./libtest.so)undefined symbol: __gxx_personality_v0  (./libtest.so)        linux-gate.so.1 =>  (0xbfffe000)        /lib/libonion.so (0xb7faa000)        libc.so.6 => /lib/libc.so.6 (0xb7e5f000)        libdl.so.2 => /lib/libdl.so.2 (0xb7e5a000)        /lib/ld-linux.so.2 (0x80000000)xxxxxx:~> c++filt _ZN4Test6outputEvTest::output()xxxxxx:~>

       一切一目了然。

 

 

       再回忆一下, 之前我们遇到过类似问题, 最终发现是makefile中没有指定对应的静态库, 也就无法找到静态库中的函数。 其实, 这种情况和上述情况是完全一致的, 总之就是找不到函数的定义, 没有符号。

       最后说一下, 如果你愿意, 用nm命令也可以哈, 如下:

 

xxxxxx:~> nm -u libtest.so         U __cxa_atexit@@GLIBC_2.1.3         w __cxa_finalize@@GLIBC_2.1.3         w __gmon_start__         U __gxx_personality_v0         w _Jv_RegisterClasses         U _ZN4Test6outputEv         U _ZNSt8ios_base4InitC1Ev         U _ZNSt8ios_base4InitD1Evxxxxxx:~> c++filt _ZN4Test6outputEvTest::output()xxxxxx:~>

       不多说。

 

 

 

 

转载地址:http://ciwti.baihongyu.com/

你可能感兴趣的文章
在qt中使用QSplitter设置初始比例setStretchFactor失效的解决方法
查看>>
repeater的使用
查看>>
qt msvc编译中文乱码解决
查看>>
qt实现点击出现窗口,点击其他任何地方窗口消失
查看>>
QML DropArea拖拉文件事件
查看>>
CORBA links
查看>>
读后感:&gt;
查看>>
ideas about sharing software
查看>>
different aspects for software
查看>>
To do list
查看>>
Study of Source code
查看>>
如何使用BBC英语学习频道
查看>>
spring事务探索
查看>>
浅谈Spring声明式事务管理ThreadLocal和JDKProxy
查看>>
初识xsd
查看>>
java 设计模式-职责型模式
查看>>
构造型模式
查看>>
svn out of date 无法更新到最新版本
查看>>
java杂记
查看>>
RunTime.getRuntime().exec()
查看>>