Linux程序在预处理、编译、汇编、链接、运行步骤的作用
創(chuàng)建一個hello.c文件,按步驟操作:
一、預編譯 <生成 hello.i文件 >
操作步驟:gcc -E hello.c -o hello.i
1.將所有的#define刪除,并展開所有的宏定義;?
2.處理所有的預編譯指令,例如:#if,#elif,#else,#endif;?
3.處理#include預編譯指令,將被包含的文件插入到預編譯指令的位置;?
4.添加行號信息文件名信息,便于調試;?
5.刪除所有的注釋:// /**/;?
6.保留所有的#pragma編譯指令,因為在編寫程序的時候,我們經常要用到#pragma指令來設定編譯器的狀態(tài)或者是指示編譯器完成一些特定的動作。?
生成.i文件。
包括(1)去注釋 (2)宏替換 (3)頭文件展開 (4)條件編譯
二、編譯(高級語言——>匯編語言)<生成hello.s文件>
操作步驟:gcc -S hello.i -o hello.s? ?
主要作用:1.掃描(詞法分析),2.語法分析,3.語義分析,4.源代碼優(yōu)化(中間語言生成),5.代碼生成,目標代碼優(yōu)化。
三、匯編(匯編語言——>二進制文件)<生成hello.o文件>
操作步驟:gcc -c hello.s -o hello.o
主要作用:匯編器是將匯編代碼轉變成可以執(zhí)行的指令,生成 目標文件。
四、鏈接(生成exe文件)
操作步驟:gcc hello.o -o hello
主要作用:鏈接過程主要包括:地址和空間的分配,符號決議和重定位。
地址和空間:系統給函數、變量分配地址和空間。
符號決議:也可以說地址綁定,分動態(tài)鏈接和靜態(tài)鏈接,
重定位:假設此時又兩個文件:A,B。A需要B中的某個函數mov的地址,未鏈接前將地址置為0,當A與B鏈接后修改目標地址,完成重定位
五、運行
操作步驟:./hello
主要功能:運行程序
轉載于:https://www.cnblogs.com/single-dont/p/11315980.html
總結
以上是生活随笔為你收集整理的Linux程序在预处理、编译、汇编、链接、运行步骤的作用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Gym - 100941G
- 下一篇: HBASE完全分布式安装