-c
選項表示編譯、組合指定的原始檔(也就是編譯原始檔),但是不進行連結。使用-c
選項可以將每一個原始檔編譯成對應的目標檔案。$gcc -c test1.c test2.c test3.c $ls -l *.o -rwxr--r-- 1 root 23 Feb 7 02:57 test1.o -rwxr--r-- 1 root 17 Feb 7 02:57 test2.o -rwxr--r-- 1 root 20 Feb 7 02:57 test3.o
-c
選項,則僅僅生成一個可執行檔案,沒有目標檔案。-c
選項表示只編譯原始檔,而不進行連結,因此,對於連結中的錯誤是無法發現的。-c
選項的時候不會發現連結錯誤。#include <stdio.h> void func_a(){ printf("FUNC_An"); }
#include <stdio.h> int main(void) { func_a(); func_b(); return 0; }
-c
選項編譯兩個原始檔,如下所示:
$gcc -c func.c main.c
編譯器沒有輸出任何錯誤資訊。-c
選項編譯兩個原始檔:
$gcc func.c main.c
會看到如下的報錯資訊:
/tmp/ccLlOhvh.o:在函數‘main’中:
main.c:(.text+0x14):對‘func_b’未定義的參照
collect2: 錯誤:ld 返回 1