我在我的C程序中有大量的包含。在開發過程中,我嘗試了不同的做事方式,所以我敢打賭,我已經包含了一些我已經包含但未被使用的庫。我可以知道我的C程序中包含哪些庫實際上被使用了嗎?
該編譯器擺脫未使用的庫嗎?有沒有可以告訴我的工具?即使編譯器確實擺脫了代碼,如果我可以擺脫一些東西,它會清理源代碼。
我在我的C程序中有大量的包含。在開發過程中,我嘗試了不同的做事方式,所以我敢打賭,我已經包含了一些我已經包含但未被使用的庫。我可以知道我的C程序中包含哪些庫實際上被使用了嗎?
該編譯器擺脫未使用的庫嗎?有沒有可以告訴我的工具?即使編譯器確實擺脫了代碼,如果我可以擺脫一些東西,它會清理源代碼。
它實際上並沒有那麼決定什麼最後進入可執行的編譯器,但鏈接。現代鏈接器足夠聰明,除非使用代碼,否則不能從庫中提取代碼。所以你可以鏈接到數百個庫,但是如果你不在其中調用任何函數,那麼他們不會向你的程序添加任何代碼。
至於標題文件,大多數不包含任何比申報和預處理器宏的更多,而那些不會自行添加代碼。包含許多頭文件的最大缺點是會減慢編譯源文件的速度。
沒有,工具包將在你告訴它鏈接的任何庫鏈接。您可以運行通過工具如Doxygen的,這將產生如何你的代碼被用於文檔的頁面和圖表你的源代碼,但它不一定會告訴你是否正確或有效地使用圖書館。
它是由程序員來確定庫是必要的,要慎重選擇執行該程序需要哪些庫。不必要的內容會增加編譯時間,並且可能會膨脹二進制文件。
的Linux工具,爲您找到共享的
A)中含有的符號(比如一個函數),這是存在於你的目標代碼/庫
b)和依賴關係,這可能是有用的庫是納米和分別LDD工具。
下面的鏈接瞭解更多信息非常有用,
http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html
通常'從標準庫#include's只是提供原型和聲明,即只存在在編譯時所有的東西,所以我假設他們可能只是在放慢彙編速度;但是,清理不必要的源頭肯定是一件好事。 – 2012-07-31 15:16:09
您正在使用哪個工具鏈?編譯器不會刪除死代碼,但鏈接器可以。 – user7116 2012-07-31 15:16:46
查看此鏈接: http://stackoverflow.com/questions/51561/how-do-i-automate-finding-unused-include-directives – heretolearn 2012-07-31 15:24:40