用ldd -r, c++filt, nm搞定一个so库缺符号的问题
来源:互联网 发布:淘宝蛋蛋家全名 编辑:程序博客网 时间:2024/05/21 10:42
最近, 编译了一个detailpage.so库, 直接放到测试环境, 准备验证业务功能, 结果, 服务重启的时候显示: failed to open ....
1. 这个问题一看就知道原因了, 不是缺静态库, 而是缺符号了(符号未定义), 用ldd -r detailpage.so看了一下, 果然如下, 缺符号xxx
2. 于是用c++file xxx查了一下, 查到了函数。
3. 于是查找函数在那么目录, 可以用之前说过的findcpp命令, 查到了对应的静态库libyyy.a. 到了这不有点纳闷了, 一切都有啊, 怎么异常呢? 准备去请教, 但还是想独立解决这个问题。 再细想了一下, 继续搞起。
4. 看看libyyy.a中缺符号xxx, 用nm命令看了一下, 发现xxx符号前面是U, 果然是未定义啊
5. 于是更新这个目录的代码, 重编, 就OK了, 一切搞定。
最后附上nm命令的操作结果:
nm输出字符含义RRead only symbol. 比如在代码中有一个const MAXDATA = 3095; 则MAXDATA就是一个Read only symbolN这是一个调试符号D这是一个已经初始化的变量的符号。比如代码中int i = 1和char *str = "Hello"则i和str都是这种类型的符号TText段的符号。子程序都是这种符号,比如文件中实现了一个函数function,则function就是这种符号U未定义的符号。如果文件中引用了不存在的函数,则这些未定义的函数符号就是这种类型S未初始化的符号,比如全局变量int s;则s的符号就是此类型
1 0
- 用ldd -r, c++filt, nm搞定一个so库缺符号的问题
- so库又一次遇到 undefined symbol------ldd, nm, c++filt命令大显身手
- ldd -r xxx.so命令的重要作用------见招拆招地解决缺库问题(undefined symbol)
- Linux下的库操作工具-nm、ar、ldd、ldconfig和ld.so
- Linux下的库操作工具-nm、ar、ldd、ldconfig和ld.so
- Linux下的库操作工具-nm、ar、ldd、ldconfig和ld.so
- 库操作工具(nm/ar/ldd/ldconfig/ld.so) -- linux
- nm 和 c++filt - [GNU/Linux]
- nm、ar、ldd、ldconfig和ld.so(Linux下的库操作工具) (2006-12-24 21:58:53)
- nm命令查看库文件的符号
- nm符号的类型
- 用ldd+程序名解决的一个问题
- c++filt
- c++filt
- c++filt
- c++filt
- C/C++ -- Lib库文件nm调试之符号表
- C/C++ Lib库文件nm调试之符号表
- Theme
- 梆定变量的长度不一致也可能会造成硬解析
- 京东2017实习校招笔试题目-异或实现
- 对象锁的同步与异步
- 设计模式_模版设计模式概述和使用
- 用ldd -r, c++filt, nm搞定一个so库缺符号的问题
- 5.参数传递
- AppTheme属性设置集合
- WebService应用以及jdk如何应用
- Linux之内存管理mm_struct
- socket实现http协议
- Undefined symbols for architecture i386: "register_all_MyClass(lua_State*)"
- error: QtGui/QAction: 没有那个文件或目录
- 没事的,总会长大(2017.01-2017.04)