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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

windows环境下gcc的使用(二):gcc命令与程序编译链接过程

發布時間:2024/3/24 windows 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 windows环境下gcc的使用(二):gcc命令与程序编译链接过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

測試Linux命令

上一篇博客已經安裝好了cygwin,相當于在windows平臺上已經搭建好了一個模擬Linux的環境,那么在cygwin的終端(Cygwin64 Terminal)中測試Linux指令。可以看到命令cls是windows下的清屏指令,在這里是沒有定義的,pwd是Linux命令,顯示了當前的路徑。

gcc命令使用

  • 新建一個文件夾用戶來存放示例代碼。
  • 在Demo.c文件中添加如下代碼,一個簡單的按下按鍵輸出語句的C程序。
#include "stdio.h"int main(int argc, char**argv) {while(1){printf("this is a demo");getchar();}return 0; }
  • 在終端中通過cd命令進入該目錄。首先通過命令gcc Demo.c -o Demo來直接一步到位,生成一個名為exe文件。該命令中Demo.c為源文件名,-o后的Demo為exe文件名。 可以看到在該文件夾中已經生成了一個Demo.exe文件了。

    雙擊點開Demo.exe文件,可以看到每按下一個任意按鍵,就會輸出信息,這和上方的代碼作用一致。這么看其實這個還是很快的,而且挺方便的。
    這個命令相當于直接將預編譯、編譯、匯編、鏈接過程一個接一個的執行了,就像一條鏈一樣,這也就是編譯鏈。
    接下來分別分析這四個步驟。

生成可執行文件的步驟

首先這些工具都可以通過xxx --help命令來獲取到該工具的指令。

那么我們需要關注的就是最下面的這幾個指令了。

根據其后方的注釋翻譯如下:

gcc -E:只進行預編譯,不編譯、不匯編、不鏈接,最終會生成xxx.i的預編譯文件。
gcc -S:只進行預編譯、編譯,不進行匯編或鏈接,最終會生成xxx.s的匯編文件。
gcc -c:進行預編譯、編譯、匯編,不進行鏈接,最終會生成xxx.o的目標文件。
gcc -o:進行預編譯、編譯、匯編、鏈接,最終會生成xxx.exe的可執行程序。

那么根據這些指令來分別執行并生成對應的文件,看看它們長什么樣。
這里分別在終端中執行這四個命令:

gcc -E Demo.c -o Demo.i
gcc -S Demo.i -o Demo.s
gcc -c Demo.s -o Demo.o
gcc Demo.o -o Demo

可以看到這些命令都是與上方的分析對應的,而且文件夾中已經分別生成了Demo.i、Demo.s、Demo.o、Demo.exe三個對應的中間文件和一個最終的可執行文件,這也驗證了上述分析是正確的。

通過文件的類型也可以看到這些文件屬于哪一類。

1. Demo.i文件
在Demo.i文件中,處理了宏定義和include,也去除注釋,但是這個文件并不會對對語法進行檢查。

通過上面的代碼可以找到這些源文件的目錄位置。“/uer/include/” 這個路徑意思是cygwin的根目錄下的user目錄下的include目錄。找到該路徑可以看到這里有c語言的各種庫函數。

在這段代碼的最后就可以看到之前在Demo.c文件中編寫的源代碼。所以可以看出預編譯過程其實就是把include的頭文件中的內容在這里展開了。

2. Demo.s文件
在Demo.s文件中,將檢查上一個生成的Demo.i文件的語法正確性,如果語法正確,就會生成匯編語言的代碼。

3. Demo.o文件
在Demo.o文件中,存放著目標代碼,這是一種ELF格式的代碼,這里存放的是最接近機器語言甚至就是機器語言的代碼,這也對應著已經到了能夠生成最終可執行文件的最后一步了。可以看到這里都是一些亂碼,可以理解為機器的語言,接下來,就可以通過這寫機器語言所生成的代碼,來與機器進行“溝通”了。

4. Demo.exe文件
這個文件可以說很熟悉了,windows上的可執行程序,絕大部分使用的軟件都是以這個可執行程序作為入口的。這也就是我們最終所要得到的目的文件了。

總結一下

這就是對一個包含了一個系統自帶的頭文件stdio.h的xxx.c文件的基本編譯、鏈接最后生成可執行程序的過程了。通過gcc --help可以看到所向外提供的指令。具體的過程也都是通過查看指令后方的注釋,來進行測試,即可觀察到相應的現象。之后嘗試定義不同的xxx.c文件和包含自定義的xxx.h文件來進一步了解gcc編譯的細節。不過都是后話了。多動手還是最重要的。畢竟紙上得來終覺淺 絕知此事要躬行。

總結

以上是生活随笔為你收集整理的windows环境下gcc的使用(二):gcc命令与程序编译链接过程的全部內容,希望文章能夠幫你解決所遇到的問題。

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