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

歡迎訪問 生活随笔!

生活随笔

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

linux

一个C程序的编译过程(Linux环境下Gcc)

發布時間:2023/12/20 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个C程序的编译过程(Linux环境下Gcc) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一 以下是C程序一般的編譯過程:


?

?從圖中看到:

????? 將編寫的一個c程序(源代碼?)轉換成可以在硬件上運行的程序(可執行代碼?),需要進行編譯階段? 和鏈接這兩個階段。

????? 其中,

????? 1.? 編譯階段先通過“編譯器?“把一個?.c / .cpp 源代碼?編譯成 .s的匯編代碼?;再經過“匯編器?” 把這 個.s的匯編代碼匯編成?.o 的 目標代碼

????? 2.? “連接器?“ 通過連接其他 .o 代碼(如果需要的話) 庫文件 和 1 中的.o 目標代碼生成可執行文件

該文件流被這三種程序(紅色)的加工,分別表現出四種形式(藍色) ,這就是c程序的編譯和鏈接過程。如果再詳細的話,編譯器在將源文件編譯成匯編文件的過程又分為:預處理階段(生成?.i代碼) 和? 優化階段

?


二、C編程中的文件后綴名介紹

??? .c 未經過預處理的C源碼
??? .h C頭文件??
??? .i 經過預處理的C源碼

????.s 生成的匯編語言代碼?
??? .o 編譯之后產生的目標文件
??? 解釋:*.c一般使我們自己編輯的代碼,使我們勞動的結晶;*.h一般是我們手工生成的接口文件,如果愿意,也可在*.c完成后用GCC的選項-aux-info幫我們生成;*.i是經過預處理后的源碼,是由GCC在選項-E編譯下自動生成的文件;*.o是編譯后產生的目標文件;*.s是GCC在選項-S編譯下生成的匯編語言代碼,對于性能要求很高的程序可以先生成匯編語言文件并對匯編做優化,然后用優化后的匯編生成目標文件并鏈接

?


三?演示 hello.c?的編譯?過程(Linux 下 Gcc)

????

???? ??? 本小節的演示都針對文件 hello.c 進行

?? 1. /*
?? 2.? * hello.c
?? 3.? */
?? 4.
?? 5.?? #include <stdio.h>
?? 6.?? int? main()
?? 7.?? {
?? 8.???? printf("
?
Better goal, Better life!?/n");
?? 9.???? return 0;
? 10.?? }


??1.生成預處理后的文件 hello.i

? ???$?gcc -E hello.c -o hello.i

? 2?.生成匯編語言文件 hello.s

??????$?gcc -s hello.i -o hello.s

???3.生成目標文件 hello.o

??????$ gcc -c hello.i
????? $ gcc -c hello.s

?? 4.?生成可執行文件

??????$ gcc -o?hello?hello.o

?? 5.?運行及結果

??????$?./hello

??????Better goal, Better life!

當然也可以直接生成, $?gcc -c hello.c??就可以生成可執行文件。這是Gcc內部的事。但就算是跳躍也要經過一步步的翻譯,?原理是相似的,萬變不離其宗!

總結

以上是生活随笔為你收集整理的一个C程序的编译过程(Linux环境下Gcc)的全部內容,希望文章能夠幫你解決所遇到的問題。

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