2013-10-18 64 views
2

我正在編譯一個內核模塊,我包括<asm/unistd.h>,但我不確定編譯器是否使用/usr/includes/(錯誤)中的unistd.h/usr/src/kernel-3.x.x/arch/x86/includes/(右)。檢查什麼文件是'make',包括

我的問題是:如何檢查哪兩個編譯器使用?

此外,有沒有辦法從內核頭文件而不是從/usr/include的文件?

回答

1
cpp code.c | grep unistd.h 

gcc -E code.c | grep unistd.h 
+0

我想'gcc的-E code.c | grep unistd.h'不會打印任何東西,因爲'#include '會被它的內容替換,我認爲它在預處理後不會說「unistd.h」。我錯了嗎? – Eregrith

+0

@Eregrith,試試看,在我的電腦上:'david @ debian:〜$ cpp code.c | /usr/include/x86_64-linux-gnu/asm/unistd.h「1 3 4' '#5」/ usr/include/x86_64-linux-gnu/asm/grep unistd.h'返回 '#1「 unistd.h「2 3 4' –

+0

好的,我會在幾分鐘內嘗試。如何強迫其中一條路? – alexandernst

1

爲了回答你問題的第二部分:

並且還,有沒有辦法迫使從內核頭文件,而不是從/usr/include的一個文件?

您可以通過-nostdinc選項gcc

「不要搜索標準系統目錄中的頭文件只有你用-I選項(和當前文件的目錄中指定的目錄,如果合適的話)被搜索。「

GCC: Options Controlling the Preprocessor

+0

謝謝先生,我在找那:) – alexandernst