2010-04-21 189 views
18

我正在處理的代碼應該可以爲託管和獨立環境構建,爲後者提供一些stdlib函數的私有實現。使用GCC編譯爲獨立環境

我可以在普通工作站/構建服務器上使用GCC進行可靠測試嗎?

  • 的「-ffreestanding」選項看起來前途無量,但它似乎「只有」禁用內置插件和正確設置STDC_HOSTED宏,它仍然提供的所有系統頭。

  • 選項「-nostdinc」限制性太強;我仍然想使用獨立實現所需的頭文件(特別是stddef.h和limits.h)。

我在這裏錯過了什麼?

呵呵,我現在使用的是GCC 4.4.3,會很快升級到4.5.0。

+0

好奇你爲什麼要建設獨立?你正在製作這些鐵桿「/ sbin」程序之一嗎?你在寫內核嗎?我只看到了在定製Linux環境中提到的「 - 完美」。 – 2010-04-21 08:31:08

+0

簡答題就是市場需求。我們在嵌入式/移動方面的一些客戶希望我們的產品是完全獨立的。 – Christoffer 2010-04-21 08:40:42

回答

18

好吧,既然還沒有答案,我還是不妨描述我是如何完成這項工作的。這很簡單,雖然取決於目標系統,但它可能很乏味。

使用「-nostdinc」表示包含路徑的標準系統將被跳過;其他包含「-I」的包含路徑當然仍會被搜索標題。

因此,對於獨立的構建目標,我創建一個文件夾 '包括 - 獨立 - C89' 和鏈接相關的系統頭 - float.h時iso646.hlimits.h中stdarg頭文件.hstddef.h - 在那裏。其他頭文件可能會包含在這些文件中,具體取決於您的平臺,因此您可能需要進行一些研究並設置更多鏈接(因此,如果您需要爲多個目標平臺執行此操作,則需要進行繁瑣的工作)。

的C89目錄隨後可以用作鹼關於「包括-獨立-C99」,額外的標頭鏈路是stdbool.hstdint.h

命令行使用是然後

gcc -std=c89 -nostdinc -nostdlib -ffreestanding -I include-freestanding-c89 

gcc -std=c99 -nostdinc -nostdlib -ffreestanding -I include-freestanding-c99