2010-02-23 37 views
2

這裏有一個簡單的C文件:如何編譯與OS X上的--pedantic錯誤?

#include <stdio.h> 
#include <stdlib.h> 

int 
main() { 
    printf("hi there!\n"); 
    return 0; 
} 

gcc -ansi -pedantic -pedantic-errors編譯給出了這樣的:

In file included from /usr/include/i386/_structs.h:38, 
      from /usr/include/machine/_structs.h:31, 
      from /usr/include/sys/_structs.h:57, 
      from /usr/include/sys/signal.h:154, 
      from /usr/include/sys/wait.h:116, 
      from /usr/include/stdlib.h:65, 
      from test.c:2: 
/usr/include/mach/i386/_structs.h:91: error: type of bit-field ‘__invalid’ is a GCC extension 

隨着對GCC的擴展其它更多的錯誤。我知道我可以刪除-pedantic-errors開關並重新編譯,但出於某種原因,這不在卡中。有沒有辦法克服這個錯誤;也許正在下載安裝另一個C庫的&?我正在本地處理需要在遠程計算機上編譯的代碼,因此不幸的是,我無法將Makefile設置爲指向特殊的庫位置。

+0

向Apple舉報bug! – kennytm

回答

1

您可以修改/usr/include/mach/i386/_structs.h:91以使用__extension__關鍵字。雖然你不得不想知道爲什麼還不是這樣。

另一個文件級別解決方法是在_structs.h的頂部添加#pragma GCC system_header指令。

要在構建級別修復它,請將-isystem /usr/include/mach/i386/添加到編譯器選項。該文件夾中的所有標題將被包含,就好像它們是系統標題一樣(應該是這種情況,但顯然不是)。

+0

我真的好奇,我喜歡。這不是像stdlib.h是一個奇怪的馬赫唯一的頭文件,因爲大聲哭泣。我相信你的解決方案會起作用,但我認爲這絕對是最後一個解決方案。 – decitrig

+0

好吧,我已經添加了一些額外的解決方案,其中之一應用於構建而不是文件。 – Clifford