2015-04-01 83 views
-1
gcc -c x.c 

告訴編譯器從x.c文件創建目標代碼,而不是試圖鏈接它的權利?gcc中的-o選項是什麼?

什麼-o選項告訴編譯器在

gcc a.o y.o -o x.out 

而其他的問題,我有,當我有一個源代碼,如:

#include <stdio.h> 

int main(){ 
    puts(""); 
} 

好了好了,編譯器知道到哪裏尋找stdio.h中,但可執行文件必須鏈接到標準輸入。不是嗎? stdio.o駐留在哪裏?

+2

我不認爲這是第一次有人問這個。 – 2015-04-01 18:53:18

+0

@iharob你能發佈一個鏈接嗎? – 2015-04-01 18:53:58

+2

我搜查了,沒有找到重複。但是下面的答案沒問題,我想這是低估的,因爲人們認爲你應該不用'gcc --help'並且看看每個選項是什麼,你不這麼認爲嗎? – 2015-04-01 18:54:12

回答

2

請參閱manpages.info/linux/gcc.1.html。在簡介部分下,您將看到-o選項。

關於

好了好了,編譯器知道到哪裏尋找stdio.h,但可執行文件必須鏈接到stdio.o不是嗎? stdio.o在哪裏?

第一個問題的答案是「否」。由於第一個問題的答案是「否」,所以第二個問題是不相關的。

stdio.h中聲明的函數和變量不必在stdio.o中。它們通常位於鏈接器查找庫文件的其中一個目錄中的庫(.a.so)中。

一般來說,沒有規定每個.h文件都有對應的.o文件。可以在.h文件中聲明的函數和變量在多個.c文件中實現,這將導致多個.o文件。也可以在多個.h文件中聲明的函數和變量在一個.c文件中實現。這些組織方式因項目而異。

每個.c文件,在另一方面,有一個相應的.o文件(我還沒有看到有多個.c文件可以被編譯爲創建一個.o文件中的任何平臺)。編譯.c文件產生的所有.o文件都鏈接在一起以創建可執行文件。

+0

我看,非常感謝。 – 2015-04-01 19:10:53

2

,指示輸出文件,也就是你的目標文件或可執行文件應該是什麼,真的是你可以通過做gcc --helpman gcc

<stdio.h>是標準庫的一部分,看到這個信息,你的編譯器已經連接至。

1
gcc -o [file] 

將構建輸出寫入輸出文件。這不是與優化級別的-O相混淆。我不相信這個選項與鏈接有關。