C語言中文網 目錄
首頁 > GCC編譯器 閱讀:2,724

GCC -c選項:只編譯不鏈接,僅生成目標文件

< 上一頁GCC常用選項 GCC -o選項下一頁 >

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

目標文件是一種中間文件或者臨時文件,如果不設置該選項,gcc 一般不會保留目標文件,可執行文件生成完成后就自動刪除了。

下面實例演示了 gcc -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選項表示只編譯源文件,而不進行鏈接,因此,對于鏈接中的錯誤是無法發現的。

下面例子演示了 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() 函數的定義,所以發生了鏈接錯誤。
< 上一頁GCC常用選項 GCC -o選項下一頁 >

精美而實用的網站,提供C語言、C++、STL、Linux、Shell、Java、Go語言等教程,以及socket、GCC、vi、Swing、設計模式、JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo
极速pk10开户