Linux下如何查詢一個函式在哪個庫中
阿新 • • 發佈:2019-02-02
相關文章
關於怎樣查出一個庫函式到底在哪個庫檔案中,我想到一個變通的辦法,以查詢fcntl函式在哪個庫檔案中為例吧:
1、找到一個使用fcntl的可執行檔案,如test_fcntl。實在不行,自己編一個只有fcntl函式的c檔案,然後編譯一下得了。
2、使用“ldd test_fcntl”命令,可以追蹤出該可執行檔案到底使用了哪些庫檔案。通常可能有幾個到幾十個。
3、根據要查詢的函式的作用和上一步所得到的各庫檔案的名字大致推測一下,該函式可能會在哪個或哪些庫中。
4、最後使用"nm test_fcntl"命令,依次查詢一下第三步所得到的庫檔案,通常就可以最後確定fcntl函式到底在哪個庫中。
比如,我用上面的方法查出fcntl函式在“/lib/tls/libc.so.6”庫中。
//##########################################################################################################################
有一些常識或者說平時的積累是必要的,終究常用的庫很少。
當我遇到一個函式不知道所屬的庫的時候,我會先找到標頭檔案所屬的包,然後看看那個包(或者相關包)的.a或者.so檔案有哪些,然後:
objdump -x 庫檔案 | grep 函式名
確認函式名是定義而不是引用以後,就知道需要連結這個庫了。