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駐留在哪裏?
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駐留在哪裏?
請參閱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
文件都鏈接在一起以創建可執行文件。
我看,非常感謝。 – 2015-04-01 19:10:53
,指示輸出文件,也就是你的目標文件或可執行文件應該是什麼,真的是你可以通過做gcc --help
或man gcc
<stdio.h>
是標準庫的一部分,看到這個信息,你的編譯器已經連接至。
gcc -o [file]
將構建輸出寫入輸出文件。這不是與優化級別的-O相混淆。我不相信這個選項與鏈接有關。
我不認爲這是第一次有人問這個。 – 2015-04-01 18:53:18
@iharob你能發佈一個鏈接嗎? – 2015-04-01 18:53:58
我搜查了,沒有找到重複。但是下面的答案沒問題,我想這是低估的,因爲人們認爲你應該不用'gcc --help'並且看看每個選項是什麼,你不這麼認爲嗎? – 2015-04-01 18:54:12