c 網頁標題 我怎樣才能找出哪個庫是一個給定的對象?




網頁標題 (4)

我在FORTRAN和C上編寫運行Irix 6.5的SGI,但是這應該適用於所有類Unix系統。 當我收到“無法解析的文本符號”鏈接錯誤時,如何找到需要鏈接到我的程序的庫? 下面是我從鏈接器看到的一個例子:

ld32: ERROR  33 Unresolved text symbol "ortho2_" -- first referenced by ./libfoo.a

我只需要知道哪些庫是必需的,或者是否有一些工具或命令可以幫助我解決這個問題?


使用nm (正如Robert Gamble的答案 )是對你的問題的正確答案。 訣竅是知道在哪裡尋找圖書館。 你的程序做什麼? 如果有大量的數字進行,你可能應該連接數學庫(如LAPACK或BLAS),並可能要開始在那裡看。 網絡搜索也可以是有幫助的 - 我在我最喜歡的搜索引擎中輸入“ortho2”,並得到這個文件 ,表明它在libfgl.a

請注意,在搜索時,您應該省略尾部的下劃線 - 通常由編譯器將其添加到例程名稱中。


如果這是一個標準函數,哪個是正確的,手冊頁會告訴你它在哪個庫中。


我有一個尋找腳本。 輸入lookfor func_name

#!/bin/csh
foreach i (*.o *.a *.so)
 echo $i
 nm $i | grep -i $1
end

您可以使用nm命令列出共享庫中的動態符號:

nm -D /lib/libc.so.6

然後grep你正在尋找的符號。 省略靜態庫的-D。 你可以用循環或者用xargs來掃描多個庫。

我通常只是使用谷歌(假設符號是從一個公開的圖書館)。





sgi