簡體   English   中英

如何創建一個鏈接器只鏈接我的程序使用的函數的庫?

[英]How do I create a library where the linker only links functions used by my program?

. 我正在編譯一個8位AVR微控制器的應用程序。 為了減少微控制器中的閃存使用, 鏈接器必須僅鏈接應用程序代碼使用的函數 我正在編寫自己的庫,我發現了以下聲明。

“為每個代碼模塊編寫一個函數。這將編譯為每個對象模塊一個函數” - 來源: http//nongnu.org/avr-libc/user-manual/library.html

這是什么意思? 如何為每個函數創建單獨的目標文件? 現在我的庫中只有一個.h文件和一個.c文件。

“每個代碼模塊一個函數”表示每個C源文件一個函數。 這將為每個函數提供一個目標文件。

這看起來很尷尬,使用GCC時執行此操作的典型方法如下所述

  1. 使用-fdata-sections -ffunction-sections選項進行編譯,告訴GCC將數據和函數放在不同的部分中。 截面只是目標文件中的一個概念,基本上是一個獨立的區域。 單個對象文件可以包含許多部分。
  2. 然后鏈接--gc-sections ,告訴鏈接器垃圾收集未使用的部分。 這將刪除死代碼。

暫無
暫無

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

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