so库又一次遇到 undefined symbol------ldd, nm, c++filt命令大显身手
来源:互联网 发布:疯狂淘宝李涛微博 编辑:程序博客网 时间:2024/05/18 00:37
最近发版本, 灰度发布的时候, 发现进程没来, 回包自然是异常的。 立即进行版本回退, 发现OK.
哪里出问题了呢? 直接ldd -r libtest.so一下, 就知道了, 原来是缺符号。 看看简化后的示例代码:
#include <iostream>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:~>
不多说。
阅读全文
1 0
- so库又一次遇到 undefined symbol------ldd, nm, c++filt命令大显身手
- 用ldd -r, c++filt, nm搞定一个so库缺符号的问题
- ldd -r xxx.so命令的重要作用------见招拆招地解决缺库问题(undefined symbol)
- AR, NM, LDD命令
- nm *.so no symbol
- 库操作工具(nm/ar/ldd/ldconfig/ld.so) -- linux
- nm 和 c++filt - [GNU/Linux]
- Linux命令c++filt
- 动态库编译:.so: undefined symbol
- 'OSError: .*.so: undefined symbol'
- Linux下的库操作工具-nm、ar、ldd、ldconfig和ld.so
- Linux下的库操作工具-nm、ar、ldd、ldconfig和ld.so
- Linux下的库操作工具-nm、ar、ldd、ldconfig和ld.so
- Linux下nm和ldd 命令
- Linux下nm和ldd 命令
- Linux下nm和ldd 命令
- linux ar,gcc,ldd,nm命令详解
- Linux下nm和ldd 命令
- Spring框架整合测试时出现错误
- Dapper的基本使用
- 文件编程
- 【Android 控件架构】详解Android控件架构与常用坐标系
- 图像配准(Image Registration)简介
- so库又一次遇到 undefined symbol------ldd, nm, c++filt命令大显身手
- 跨域请求 JSONP & CORS
- JStorm与Storm源码分析(七)--BasicBoltExecutor与装饰模式
- jquery autoComplete 自定义回写样式
- 动态代理
- 姿态解算(二),姿态更新
- jdk 源码分析(1)java hashmap的结构
- sbc(三)自定义Starter-SpringBoot重构去重插件
- 51nod-1299 监狱逃离(贪心)