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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语音的预处理,编译,汇编,链接过程分析

發布時間:2024/9/19 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语音的预处理,编译,汇编,链接过程分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C語音的預處理,編譯,匯編,鏈接過程分析

1.C程序編譯分為以下幾步:

  • 預處理 (生成 .i文件)
  • 編譯(生成 .s文件)
  • 匯編(生成 .o文件)
  • 鏈接(生成 .exe文件)

2.通過圖解來理解編譯過程

3.通過Linux的gcc編譯C文件,并逐步分析:

vim test.c //Linux指令 //test.c只寫一個簡單的hello world #include<stdio.h> #include<stdlib.h> int main (){printf("hello world!!!\n");return 0; }//預處理過程 gcc -E test.c -o test.i //Linux指令 生成.i文件 ls //查看文件

? 通過圖片我們可以知道我們預處理過程生成了test.i文件,現在我們再通過Linux指令查看其內容。

cat test.i //文本格式輸出內容 vim test.i //文本編輯器打開

//可以看到原來的include語句那里被大量其他的代碼代替 //這就是預處理過程,預處理過程會把include的頭文件引入到代碼頭部gcc -S test.i -o test.s //編譯過程(生成.s文件) vim test.s //打開看看內容

? 這里記錄了變量等各種信息,這是通過編譯生成的匯編語言。后面需要通過匯編對其進行解釋,并生成目標文件。

gcc -c test.s -o test.o //匯編過程(生成.o文件,也就是目標文件) cat test.o //查看內容(會發現一堆亂碼)

//只所有會生成一堆亂碼是因為這是.o文件已經是二進制文件,所有以文本輸出是一堆亂碼。 /*為什么已經是二進制文件了,還不能執行文件呢?這是因為這只是針對你編寫的C文件編譯出來的目標文件,并不是最終的可執行文件,要變成可執行文件,還需要本地的機器指令庫。而這個工作就是鏈接了。 */gcc test.o -o test //最后一步鏈接本地庫,最終會生成可執行文件(.exe文件)

4.關于其他目標文件

? 在C中可以通過extern關鍵字,聲明一個外部全局變量或者函數。這些變量和函數可能會存在其他C文件中,所有,在鏈接過程會用到其他目標文件。因為編譯器是一單個C文件進行編譯的,所以在用其他C文件用的全局變量時必須把其他的C文件也編譯成目標文件并用鏈接器進行連接,才能使用到外部的全局變量。
為編譯器是一單個C文件進行編譯的,所以在用其他C文件用的全局變量時必須把其他的C文件也編譯成目標文件并用鏈接器進行連接,才能使用到外部的全局變量。

總結

以上是生活随笔為你收集整理的C语音的预处理,编译,汇编,链接过程分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。