2013-10-23 25 views
0

我有一個用g ++編譯的可執行文件,它鏈接了大約50個靜態庫(位於一堆系統庫的頂部)。我想知道這些庫中的哪些方法正在使用,甚至更重要哪些方法永遠不會被調用。我的C++可執行文件實際使用了哪些方法

是否有工具和/或編譯器標誌提供此?

+0

'Dependency Walker'完成你所需要的,但對於鏈接的DLL。我懷疑有沒有辦法爲靜態鏈接庫做同樣的事情,但我可能是錯的。 http://www.dependencywalker.com/ –

+0

您可以使用'valgrind'的'callgrind'來獲取應用程序*和*中實際使用的函數和庫的調用圖,以獲取特定的控制流。要查看應用程序的動態鏈接依賴關係,請使用'ldd'。 – thokra

+0

@DanielSaska:從什麼時候dep walker處理ELF可執行文件? ;)剛剛發現:http://code.google.com/p/elf-dependency-walker/ – thokra

回答

0

您可在Linux \ UNIX使用nm工具(至少當使用-g編譯)

由於您使用的靜態庫從庫中只有引用的方法將被添加到您的可執行

使用如:

nm <your executable with debug info> 

您還可以嘗試閱讀手冊頁;

man nm 
0

不確定你到底是什麼意思,但如果你想獲得未被引用的函數,那麼有一些編譯器選項。

-ffunction-sections 會告訴編譯器將每個函數放入obj文件中它自己的部分。

然後在鏈接時--gc截面--print-GC-部分會做不使用的部分(功能)的垃圾收集,並列出結果。

您可能想要構建所有靜態庫以獲得完整列表。

相關問題