首頁 >後端開發 >C++ >如何使用 GCC 和 ld 從 C/C 執行檔中刪除未使用的符號?

如何使用 GCC 和 ld 從 C/C 執行檔中刪除未使用的符號?

DDD
DDD原創
2024-12-28 07:55:14676瀏覽

How to Strip Unused Symbols from C/C   Executables with GCC and ld?

如何使用GCC 和ld 消除C/C 可執行檔中未使用的符號

簡介

優化可執行檔大小在嵌入式系統或資源中至關重要- 環境受限。為了實現這一點,從可執行檔中刪除未使用的符號非常重要。

GCC 和 ld 符號剝離

GCC 和 ld 提供了在編譯和連結期間丟棄未使用符號的選項:

海灣合作委員會選項

  • -fdata-sections:將程式碼和資料分成每個翻譯單元中的不同部分。
  • -ffunction-sections:將函數拆分為單獨的部分。

ld選項

  • -Wl,--gc-sections:指示ld丟棄未引用的部分。

實作

刪除未使用的符號,請依照下列步驟操作:

  1. 編譯使用-fdata-sections 和-ffunction-sections 標誌的GCC 原始檔。
  2. 使用 ld 和 -Wl,--gc-sections 標誌將目標檔案連結在一起。

範例

假設我們有一個檔案test.cpp 有兩個函數,其中之一是未使用:

int use(int a);
int unused(int a);

要刪除未使用的函數,請如下編譯和連結:

gcc -Os -fdata-sections -ffunction-sections test.cpp -o test -Wl,--gc-sections

此指令將指示GCC將程式碼和資料分成多個部分,並指示 ld 丟棄未引用的部分,導致可執行檔的大小減少。

以上是如何使用 GCC 和 ld 從 C/C 執行檔中刪除未使用的符號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn