gcc編譯選項 o和 c介紹

2021-09-12 07:57:10 字數 2700 閱讀 1723

一 選項-o

1 點睛

選項-o用於指定要生成的結果檔案,後面跟的就是結果檔案名字。

o是output的意思,不是目標的意思。

結果檔案可能是預處理檔案、彙編檔案、目標檔案或者最終可執行檔案。

2 示例

gcc -s test.i -o test.s

# -s 說明只進行到編譯階段

# 生成彙編檔案test.s

3 示例

gcc -c test.cpp -o test

# 這個gest是目標檔案,不是可執行檔案,因為這裡用到了-c,告訴gcc到彙編為止,不要進行鏈結。

gcc -c test.cpp -o test.o

# 這個test.o和test一樣,都是目標檔案

4 示例

gcc test.c -o test

# 生成可執行檔案test

二 選項-c

1 點睛

選項-c告訴gcc對原始檔進行編譯會彙編,但不進行鏈結。此時,將生成目標檔案,如果沒有指定輸出檔案,就生成同名的.o檔案。

2 示例

[root@localhost temp]# gcc -c test.cpp

[root@localhost temp]# ll

total 8

-rw-r--r--. 1 root root 188 mar 10 11:00 test.cpp

-rw-r--r--. 1 root root 1504 mar 10 11:00 test.o

# 生成了目標檔案test.o

3 示例

[root@localhost temp]# gcc -c test.cpp -o test

# test是目標檔案,而不是可執行檔案,下面測試可證明,它和test.o內容相同

[root@localhost temp]# ls

test test.cpp test.o

[root@localhost temp]# ./test

-bash: ./test: permission denied

[root@localhost temp]# chmod +x test

[root@localhost temp]# ./test

-bash: ./test: cannot execute binary file

[root@localhost temp]# md5sum test.o

3edeaa07cd496b92e1fd5c287de2131b test.o

[root@localhost temp]# md5sum test

3edeaa07cd496b92e1fd5c287de2131b test

4 -c後跟多原始檔情況

當-c後跟多個原始檔,會為每個原始檔生成乙個.o檔案,但此時是不能使用-o的。

5 實戰

test1.cpp內容

[root@localhost temp]# cat test1.cpp

#include int t1()

test2.cpp內容

[root@localhost temp]# cat test2.cpp

#include int t2()

進行-c編譯和彙編

[root@localhost temp]# ll

total 12

-rw-r--r--. 1 root root 186 mar 10 11:05 test1.cpp

-rw-r--r--. 1 root root 186 mar 10 11:06 test2.cpp

-rw-r--r--. 1 root root 188 mar 10 11:00 test.cpp

[root@localhost temp]# gcc -c test.cpp test1.cpp test2.cpp

[root@localhost temp]# ls

test1.cpp test1.o test2.cpp test2.o test.cpp test.o

# 可以看到,分別生成了3個.o檔案

# -c 企圖用-o,會報錯

[root@localhost temp]# gcc -c test.cpp test1.cpp test2.cpp -o test.o

gcc: fatal error: cannot specify -o with -c, -s or -e with multiple files

compilation terminated.

# 如果直接生成可執行檔案(不用-c),即使有多個原始檔,-o也是可用的。

[root@localhost temp]# gcc test.cpp test1.cpp test2.cpp -o test

[root@localhost temp]# ls

test test1.cpp test1.o test2.cpp test2.o test.cpp test.o

[root@localhost temp]# ./test

hello, boy

GCC編譯選項

gcc g 在執行編譯工作的時候,總共需要4步 1.預處理,生成.i的檔案 預處理器cpp 2.將預處理後的檔案不轉換成組合語言,生成檔案.s 編譯器egcs 3.有彙編變為目標 機器 生成.o的檔案 彙編器as 4.連線目標 生成可執行程式 鏈結器ld 引數詳解 c 只啟用預處理,編譯,和彙編,也...

gcc 編譯選項

gcc 編譯選項,自己翻譯的.gcc 編譯選項,自己翻譯的.o 設定輸出檔名 c 只編譯,不連線.e 只做預編譯.pipe 在多個編譯過程之間使用管道.version 顯示版本.static 靜態連線.ansi c 模式下支援所有 iso c90 標準的 c 程式,c 模式下去除對 gnu c 擴充...

gcc 編譯選項

wall 大部分警告 wextra 一些額外的警告 werror 當出現警告時轉為錯誤,停止編譯 wconversion 一些可能改變值的隱式轉換,給出警告。wno unused parameter 函式中出現未使用的引數,不給出警告。wold style cast c風格的轉換,給出警告 wove...