gcc -c xx.c 選項講解


-c選項表示編譯、匯編指定的源文件(也就是編譯源文件),但是不進行鏈接。使用-c選項可以將每一個源文件編譯成對應的目標文件。

目標文件是一種中間文件或者臨時文件,如果不設置該選項,gcc 一般不會保留目標文件,可執行文件生成完成后就自動刪除了。
注意,使用-c選項表示只編譯源文件,而不進行鏈接,因此,對於鏈接中的錯誤是無法發現的。

下面例子演示了 gcc 編譯器在使用-c選項的時候不會發現鏈接錯誤。

1) 編寫如下的兩個源文件。

在 func.c 中定義了 func_a() 函數:

    #include <stdio.h>
    void func_a(){
        printf("FUNC_A\n");
    }

 在 main.c 中調用了 func_a() 和 func_b() 函數:

    #include <stdio.h>
    int main(void)
    {
        func_a();
        func_b();
        return 0;
    }

func_b() 函數並沒有定義,所以在鏈接時會產生錯誤(編譯時不會產生錯誤)。

2) 使用-c選項編譯兩個源文件,如下所示:

$gcc -c func.c main.c

編譯器沒有輸出任何錯誤信息。

3) 不使用-c選項編譯兩個源文件:

$gcc func.c main.c 

會看到如下的報錯信息:

/tmp/ccLlOhvh.o:在函數‘main’中:
main.c:(.text+0x14):對‘func_b’未定義的引用
collect2: 錯誤:ld 返回 1

由於沒有找到 func_b() 函數的定義,所以發生了鏈接錯誤。

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM