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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM