簡體   English   中英

鏈接器中不必要的鏈接庫

[英]Unnecessary linked libraries in linker

我有一個項目,可以從鏈接程序中排除某些庫,但仍可以構建嗎?

在最終產品的性能和存儲方面將它們排除在外更好嗎?

一個好的c ++鏈接器不會包含任何未在代碼中使用的庫的調用(所謂的“死代碼剝離”)。

因此,我想說這取決於您使用哪種C ++鏈接器來發布最終版本。 也許您應該參考鏈接器文檔以獲取有關死代碼剝離的信息。 如果不這樣做,那肯定會有助於減少程序的最終內存占用。

歡呼,希望信息對您有所幫助!

不計入最終的可執行一些未使用的庫可能會使啟動快一點,節省內存少量 -機會是只有頭文件和庫啟動代碼實際上將最終被加載,這些都可以在啟動后換出。

但是,請勿手動進行。 如果告訴您添加該庫,則可能是有原因的-也許您尚未使用某些函數調用, 但仍需要它,而后來,如果您使用該函數調用,則可能已經忘記了它。

大多數鏈接器都有一個選項,可以自動排除未使用的庫,因此您可能只想啟用該選項,即可為您處理所有事情。

注意:在極少數情況下,庫的啟動代碼可能會產生某些重要影響,在這種情況下,您不應將其排除。 最好通過檢查庫的文檔來確定。 應該(希望如此)將此類事情清楚地記錄在案。

它應該沒有任何區別。

任何有價值的鏈接程序都不會包含應用程序未(直接或間接)引用的庫中的任何內容,即使這些庫是在命令行上指定的也是如此。
包含(部分)庫的唯一原因是:-應用程序使用庫中的函數或全局對象-包含為解決某些引用而包含的庫的一部分對此庫的函數或全局對象進行了引用圖書館。

鏈接器不僅將您提供的所有內容盲目地放在一個應用程序中,而且在對象文件(用於應用程序)和庫之間進行了區分。
鏈接器首先收集所有目標文件,並解析在文件之間進行的盡可能多的引用。
之后,鏈接器將遍歷指定的庫,並從每個庫中獲取解析(已知)未解析引用所需的那些部分。 由於庫之間的依賴性,這可能會創建新的未解析的引用。 大多數鏈接程序僅對庫進行一次傳遞,但是有些鏈接器可能執行多次傳遞來解析所有引用。 可執行文件中不包含不需要解析引用的庫的某些部分。

是的,最好將不必要的庫排除在外。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM