使用GCC編譯器編譯C語言

來源:互聯網
上載者:User

使用GCC編譯器編譯C語言

GCC編譯C原始碼有四個步驟:預先處理—->編譯—->彙編—->連結。

可以利用GCC的參數來控制執行的過程,這樣就可以更深入的瞭解編譯C程式的過程。
下面將通過對一個程式的編譯來示範整個過程。

#include <stdio.h>

int main()
{
    printf("happy new year!\n");
    return 0;
}

1:預先處理:編譯器將C程式的標頭檔編譯進來,還有宏的替換,可以用gcc的參數-E來參看。
預先處理 命令:gcc -E hello.c -o hello.i
作用:將hello.c預先處理輸出hello.i

2:編譯:這個階段編譯器主要做詞法分析、文法分析、語義分析等,在檢查無錯誤後後,把代碼翻譯成組合語言。可用gcc的參數-S來參看。
編譯器(ccl)將文字檔hello.i 翻譯成文字檔hello.s, 它包含一個組合語言程式。組合語言程式中的每條語句都以一種標準的文字格式設定描述了一條低級機器語言指令。
編譯命令:gcc -S hello.i -o hello.s
作用:將預先處理輸出檔案hello.i彙編成hello.s檔案

3:彙編:把編譯階段產生的.s 檔案轉換為二進位目標代碼。可用gcc的參數-c來參看。彙編器(as)將hello.s翻譯成機器語言指令,把這些指令打包成可重定位目標程式的格式, 並將結果儲存在目標檔案hello.o中。hello.o檔案是一個二進位檔案,它的位元組編碼是機器語言。
彙編 命令:gcc -c hello.s -o hello.o
作用:作用:將彙編輸出檔案hello.s編譯輸出hello.o檔案

4:連結:把obj檔案連結為可執行檔檔案:連結器(ld)負責.o檔案的併入。結果就是hello檔案,它是一個課執行的目標檔案,可以載入到儲存空間後由系統調用。

連結命令:gcc hello.o -o hello
一步操作的話是: (-o必須在hello之前 )

$gcc hello.c -o hello
$./hello或者:(會預設產生a.out檔案)
$gcc hello.c
$./a.out

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.