symbol lookup error:undefined symbol

symbol lookup error:undefined symbol

通过一个实例,引入这个问题。特在此说明一下,搞清楚原因。

问题:

向设备移植openvas时遇到一个问题。

 

运行openvassd,报错,在此之前我已经将libgio-2.0.so.0库移植到设备上,

libgio-2.0.so.0是安装glib-2.0 (版本号2.42.1)时一块安装的库。

初看错误,以为是libgio-2.0.so.0库有问题,没有定义g_signal_accumulator_first_wins.

分析:

 

nm libgio-2.0.so.0库,发现有符号g_signal_accumulator_first_wins.

openvassd怎么会找不到这个符号的定义呢?

刚开始以为是库的路径有问题,

执行ldconfig -v|grep gio

 

 

发现链接的库就是新的库(版本2.42.1安装的库),

这时候查看了一下,安装glib-2.0时,make install的日志文件,发现glib-2.0安装时,一共安装了

libglib-2.0.so.0.4200.1

libgmodule-2.0.so.0.4200.1

libgthread-2.0.so.0.4200.1

libgobject-2.0.so.0.4200.1

libgio-2.0.so.0.4200.1

五个库,

查看了gobject的符号,

 

 

发现了问题,两个库都有符号g_signal_accumulator_first_wins,

一个是U类型,一个是T类型。

有什么不同,是不是这个不同导致的问题?

 

关于U类型和T类型的说明如下:

T类型:该符号放在代码段中,通常是那些全局非静态函数;

U类型:该符号未定义过,需要自其它对象文件中链接进来。

 

此时,就很清楚了,没有链接上signal_accumulator_first_wins定义符号的库。也就是gobject库。

将gobject移植到设备上,发现问题解决了。

 

参考:man nm

https://www.cnblogs.com/itech/archive/2012/09/16/2687423.html

 

posted @ 2019-09-18 15:20  blueyunchao  阅读(11785)  评论(0编辑  收藏  举报