2012-10-10 149 views
0

我在使用gcc編譯C文件時出現錯誤 - 由於沒有爲dce/rpc.h找到這樣的文件/目錄,所以發生錯誤。我應該在哪裏找它?gcc編譯器在編譯時查找頭文件在哪裏?

+1

檢查文件是否真的存在?如果沒有關於缺少什麼的信息(你的文件或其他東西),很難說什麼 – nhahtdh

+0

你需要額外的'-I'選項來'gcc',並且你可能想要使用'' –

+0

這些天,不是每一個系統將在系統上擁有DCE(桌面計算環境 - 用於Motif等,從OSF/1的輝煌日子等)。代碼是新的還是舊的?它是否附帶說明如何在您的平臺上找到DCE(以及您的平臺是什麼)? (GCC在不同平臺上的不同位置查找,主要看起來在/ usr/include;看起來取決於它的配置。) –

回答

0

/usr/include開始,並從那裏開始工作,假設它是系統標題。大多數系統頭文件都存儲在UNIX/Linux系統下。

如果它不是系統標題,它將會在您(或另一個第三方)放置的位置(可能在任何地方)。如果你想找到它,你可以這樣做(爲xyzzy.h):

find/-name xyzzy.h 2>/dev/null 

如果無法找到那麼你期望它可能不是您的系統上安裝了頭。你需要弄清楚如何做到這一點。例如,The Open Group有一個LGPL-style DCE implementation,你可以在Linux下使用。

根據您的平臺(AIX,HP-UX,Solaris等),安裝軟件包可能很簡單。

+0

我忘了提及它找不到頭文件dce/rpc。h – Programah

+1

然後,這將解釋錯誤。如果安裝了DCE,那麼DCE幾乎肯定會在/ usr/include下。您需要了解如何安裝它(最初通過告訴我們您使用的平臺)。 – paxdiablo

+0

它不在/ usr/include中。如果它在那裏,它會找到它。我使用的是Unix機器,但這是否表明它沒有安裝。我找到了/ -name'dce/rpc.h'2>/dev/null,但它沒有返回任何東西 – Programah

2

通過使用-v選項運行預處理器(cpp),您可以找出默認情況下gcc將搜索包含文件的目錄。你也應該指定你感興趣的語言,除非它是C,因爲每種語言都有自己的搜索路徑。

下面是一個例子:

cpp -v -x c++ < /dev/null 

請注意,您必須指定沒有文件進行預處理;否則,它會嘗試從stdin讀取。

上面顯示了C++的默認包含路徑。

4

此命令打印包含路徑:

gcc -xc -v - 

以我的Linux機器結果如下:

#include <...> search starts here: 
/usr/local/include 
/usr/lib/gcc/i586-redhat-linux/4.4.1/include 
/usr/include 
End of search list. 

隨着橫GCC,該路徑可以是非常困難的quess:

#include <...> search starts here: 
/opt/OSELAS.Toolchain-2011.11.0/arm-v5te-linux-gnueabi/gcc-4.6.2-glibc-2.14.1-binutils-2.21.1a-kernel-2.6.39-sanitized/lib/gcc/arm-v5te-linux-gnueabi/4.6.2/include 
/opt/OSELAS.Toolchain-2011.11.0/arm-v5te-linux-gnueabi/gcc-4.6.2-glibc-2.14.1-binutils-2.21.1a-kernel-2.6.39-sanitized/lib/gcc/arm-v5te-linux-gnueabi/4.6.2/include-fixed 
/opt/OSELAS.Toolchain-2011.11.0/arm-v5te-linux-gnueabi/gcc-4.6.2-glibc-2.14.1-binutils-2.21.1a-kernel-2.6.39-sanitized/lib/gcc/arm-v5te-linux-gnueabi/4.6.2/../../../../arm-v5te-linux-gnueabi/include 
/opt/OSELAS.Toolchain-2011.11.0/arm-v5te-linux-gnueabi/gcc-4.6.2-glibc-2.14.1-binutils-2.21.1a-kernel-2.6.39-sanitized/sysroot-arm-v5te-linux-gnueabi/usr/include 
End of search list 

所以,不要試圖貶低或find它,你可能會得到一個錯誤的路徑。