日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

C语言-用gcc指令体验C语言编译过程

發(fā)布時(shí)間:2025/6/17 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言-用gcc指令体验C语言编译过程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 1 環(huán)境說明
  • 2 gcc編譯步驟
    • 2.1 編輯
    • 2.2 預(yù)處理
    • 2.3 編譯
    • 2.4 匯編處理
    • 2.5 鏈接
  • 3 一步到位的方法

1 環(huán)境說明

  • 系統(tǒng):Windows
  • 編譯器:gcc
  • 命令行工具:cmder (用系統(tǒng)自帶的命令行工具也可以)

2 gcc編譯步驟

#步驟名生成文件功能
1編輯(Edit)test.c進(jìn)行編碼工作
2預(yù)處理(Pre-processing)test.i將#include頭文件以及宏定義替換成其真正的內(nèi)容
3編譯(Compiling)test.s將經(jīng)過預(yù)處理之后的程序轉(zhuǎn)換成特定匯編代碼(assembly code)的過程
4匯編處理(Assembling)test.o將上一步的匯編代碼轉(zhuǎn)換成機(jī)器碼(machine code),生成目標(biāo)文件
5鏈接(Linking)test.exe將多個(gè)目標(biāo)文以及所需的庫(kù)文件鏈接成最終的可執(zhí)行文件(executable file)

2.1 編輯

編寫以下代碼,命名文件名為test.c:

#include<stdio.h>int main() {printf("Hello World!");return 0; }

2.2 預(yù)處理

預(yù)處理gcc指令如下:

gcc -E test.c -o test.i
  • 參數(shù)-E - 執(zhí)行編譯預(yù)處理
  • 參數(shù)-o - 指明輸出文件的文件名

執(zhí)行過后控制臺(tái)沒有任何輸出,打開文件夾會(huì)發(fā)現(xiàn)生成了一個(gè)test.i文件

可以發(fā)現(xiàn)生成的test.i文件會(huì)比test.c文件大得多,因?yàn)檫M(jìn)行了大量的替換,test.i文件可以通過記事本方式打開的,也可以輸入指令type test.i在控制臺(tái)查看,由于文件內(nèi)容很多,下面僅展示最后部分,可以發(fā)現(xiàn)末尾部分還是我們編寫的源代碼,而頭文件#include<stdio.h>進(jìn)行了全部替換

2.3 編譯

編譯gcc指令如下:

gcc -S test.i -o test.s
  • 參數(shù)-S - 編譯指令
  • 參數(shù)-o - 指明輸出文件的文件名

執(zhí)行過后控制臺(tái)沒有任何輸出,打開文件夾會(huì)發(fā)現(xiàn)生成了一個(gè)test.s文件

我們這里用指令type test.s在控制臺(tái)查看文件內(nèi)容,可以發(fā)現(xiàn)程序被轉(zhuǎn)換成了匯編代碼

.file "test.c".def __main; .scl 2; .type 32; .endef.section .rdata,"dr" .LC0:.ascii "Hello World!\0".text.globl main.def main; .scl 2; .type 32; .endef.seh_proc main main:pushq %rbp.seh_pushreg %rbpmovq %rsp, %rbp.seh_setframe %rbp, 0subq $32, %rsp.seh_stackalloc 32.seh_endprologuecall __mainleaq .LC0(%rip), %rcxcall printfmovl $0, %eaxaddq $32, %rsppopq %rbpret.seh_endproc.ident "GCC: (tdm64-1) 4.9.2".def printf; .scl 2; .type 32; .endef

2.4 匯編處理

匯編處理gcc指令如下:

gcc -c test.s -o test.o
  • 參數(shù)-c - 匯編轉(zhuǎn)機(jī)器碼
  • 參數(shù)-o - 指明輸出文件的文件名

執(zhí)行過后控制臺(tái)沒有任何輸出,打開文件夾會(huì)發(fā)現(xiàn)生成了一個(gè)test.o文件

由于文件已經(jīng)是機(jī)器碼了,打開文件的話顯然都是亂碼了,用指令type test.o在控制臺(tái)查看文件內(nèi)容如下:

2.5 鏈接

鏈接處理gcc指令如下:

gcc test.o -o test
  • 參數(shù)-o - 指明輸出文件的文件名

執(zhí)行過后控制臺(tái)沒有任何輸出,打開文件夾會(huì)發(fā)現(xiàn)生成了一個(gè)test.exe文件


既然已經(jīng)轉(zhuǎn)換成了.exe可執(zhí)行文件,在Windows操作系統(tǒng)下可以直接執(zhí)行,直接在控制臺(tái)輸入test,執(zhí)行結(jié)果如下:

可以發(fā)現(xiàn)最后輸出了Hello World!那么整個(gè)過程就結(jié)束了

3 一步到位的方法

直接可以從.c文件到.exe可執(zhí)行文件,這里就不演示了

gcc test.c -o test

總結(jié)

以上是生活随笔為你收集整理的C语言-用gcc指令体验C语言编译过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。