用ldd -r, c++filt, nm搞定一个so库缺符号的问题

       最近, 编译了一个detailpage.so库, 直接放到测试环境, 准备验证业务功能, 结果, 服务重启的时候显示: failed to open ....

       1. 这个问题一看就知道原因了, 不是缺静态库, 而是缺符号了(符号未定义), 用ldd -r detailpage.so看了一下, 果然如下, 缺符号xxx

       2.  于是用c++filt 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 symbol
N这是一个调试符号
D这是一个已经初始化的变量的符号。比如代码中int i = 1和char *str = "Hello"则i和str都是这种类型的符号
TText段的符号。子程序都是这种符号,比如文件中实现了一个函数function,则function就是这种符号
U未定义的符号。如果文件中引用了不存在的函数,则这些未定义的函数符号就是这种类型
S未初始化的符号,比如全局变量int s;则s的符号就是此类型

 

        

 

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值