编译器、汇编器、链接器
鏈接的概念
鏈接(lingking)是將各種代碼和數據片段收集并組合成為一個大一文件的過程,這個文件可以加載(復制)到內存并執行。
鏈接可以執行于
從源文件到可執行文件
考慮兩個源文件main.c和sum.c。
int sum(int *a, int n);int aray[2] = {1, 2};int main() {int val = sum(array, 2);return val; } int sum(int *a, int n) {int i, s = 0;for(i = 0; i < n; i++){s += a[i];} }如上圖。驅動程序依次執行以下步驟:
各階段的功能如下:
C語言的翻譯層次
編譯器
編譯器將C程序轉換成一種機器能理解的符號形式的匯編語言程序(assmbly language program)。
匯編器
偽指令:匯編語言指令的一個變種,通常被看作一條匯編指令。
匯編器將匯編語言程序轉換成目標文件(object file),它包括機器語言指令、數據和指令正確放入內存所需要的信息。
匯編器將分支和數據傳輸指令中用到的標號都放入一個**符號表(symbol table)**中。
符號表:一個用來匹配標記名和指令所在內存字的地址的列表。
UNIX系統中的目標文件通常包含以下6個不同的部分:
- 目標文件頭,描述目標文件其他部分的大小和位置。
- 代碼段,包含機器語言代碼。
- 靜態數據段,包含在程序生命周期內分配的數據
- 重定位信息,標記了一些在程序加載進內存時依賴于絕對地址的指令和數據。
- 符號表,包含未定義的剩余標記,如外部引用。
- 調試信息,包含一份說明目標模塊如何編譯的簡明描述,這樣,調試器能夠將機器指令關聯到 C源文件,并時數據結構也變得可讀。
鏈接器
鏈接器:也稱鏈接編譯器。它是一個系統程序,把各個獨立匯編的機器語言程序組合起來并且解決所有未定義的標記,最后生成可執行文件。
可執行文件:一個具有目標文件格式的功能程序,不包含未解決的引用。它可以包含符號表和調試信息。
鏈接器的工作分3個步驟
加載器
加載器:把目標程序裝載到內存中以準備運行的系統程序。
現在可執行文件已經在磁盤中,操作系統可以將其讀入內存并啟動執行它。在UNIX系統中,加載器(loader)按照如下步驟工作:
動態鏈接庫
動態鏈接庫(dynamically linked library,DLL):在程序執行過程中才被鏈接的庫例程。
總結
以上是生活随笔為你收集整理的编译器、汇编器、链接器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql员工请假流程表字段_“员工请假
- 下一篇: University's Little_