導航:首頁 > 源碼編譯 > 編譯鏈接的概念是什麼

編譯鏈接的概念是什麼

發布時間:2025-08-16 01:57:06

① c語言裡面的編譯和鏈接是怎麼回事啊

C/C++語言的完整編譯過程是

一、預編譯

處理#define #if #include這類#開頭的語句,這些稱為預編譯指令。這個過程中會把.h文件和.c/.cpp文件組合成最終交給compile過程的原文件。這個原文件是不包含任何#開頭的語句的。所有#define定義的宏也會被替換。

二、編譯
把上面那個原文件編譯成.o或者VC里是.obj文件。這個文件保存了機器碼化的函數、函數的描述、全局變數的描述、乃至段的描述等等。

三、連接
把可執行程序需要的所有的編譯過程產生的.o或者.obj文件組合到一起。(這里也包括.lib文件,.lib文件件本質上就是打包的.obj文件集合)。另外連接過程還會組合一些其他數據,比如資源、可執行文件頭等等。

② 操作系統的工作流程是什麼

為了使計算機程序得以運行,計算機需要載入代碼,同時也要載入數據,然後由處理器執行指令。整個過程可以總結為編譯、鏈接、裝載、執行。

1、編譯

編譯過程又可以被分為兩個階段:編譯、匯編。

編譯是指編譯器讀取字元流的源程序,對其進行詞法與語法的分析,將高級語言指令轉換為功能等效的匯編代碼。

匯編器是將匯編代碼轉變成機器可以執行的命令,每一個匯編語句幾乎都對應一條機器指令。匯編相對於編譯過程比較簡單,根據匯編指令和機器指令的對照表一一翻譯即可。

2、鏈接

鏈接的主要內容是將各個模塊之間相互引用的部分處理好,使得各個模塊之間能夠正確地銜接。鏈接又分為靜態鏈接和動態鏈接:

靜態鏈接是指在編譯階段直接把靜態庫加入到可執行文件中去,這樣可執行文件會比較大;

動態鏈接則是指鏈接階段僅僅只加入一些描述信息,而程序執行時再從系統中把相應動態庫載入到內存中去。

3、裝載

程序在經過鏈接後,得到了可執行文件,下一步就需要將可執行程序載入到內存中。

由於現代操作系統均採用分頁的方式來管理內存,所以操作系統只需要讀取可執行文件的文件頭,之後建立起可執行文件到虛擬內存的映射關系,而不需要真正的將程序載入內存。

4、運行

載入器將可執行目標文件中的代碼和數據從磁碟復制到內存中,然後通過跳轉到程序的第一條指令或入口點來運行程序。

在程序的運行過程中,CPU發現有些內存頁在物理內存中並不存在並因此觸發缺頁異常,此時CPU將控制許可權轉交給操作系統的異常處理函數,操作系統負責將此內存頁的數據從磁碟上讀取到物理內存中。

數據讀取完畢之後,操作系統讓CPU jmp到觸發了缺頁異常的那條指令處繼續執行,此時指令執行就不會再有缺頁異常了。

(2)編譯鏈接的概念是什麼擴展閱讀

為使計算機按預定要求工作,首先要編製程序,無論是最早的操作系統還是現代操作系統,程序的運行都是計算機工作的本質。

早期計算機是單任務執行,由程序員直接編寫操作系統可以識別的機器語言,到現在可以實現多道程序並行,並且程序的開發由更利於程序員理解的高級語言編寫,源程序在經過一系列翻譯過程,變成計算機理解的機器語言,再執行。

整個程序執行的過程,需要CPU、內存、程序代碼、設備等配合,才能實現程序要表達的功能。

閱讀全文

與編譯鏈接的概念是什麼相關的資料

熱點內容
利息5個點演算法 瀏覽:919
python反編譯措施 瀏覽:903
php網站免費模板 瀏覽:946
pgadm如何加伺服器 瀏覽:639
python多文件批量改名 瀏覽:144
現在四川稅務app怎麼不能繳費 瀏覽:706
自己編譯的軟體 瀏覽:728
win訪問共享文件夾快捷鍵 瀏覽:68
學習的原理pdf 瀏覽:119
編譯增強模式 瀏覽:182
python如何去掉u 瀏覽:284
安卓相機怎麼拍出蘋果相機的色彩 瀏覽:830
冰箱壓縮機直接打氣 瀏覽:579
程序員憔悴的樣子 瀏覽:417
文件夾廣告彈窗 瀏覽:235
安卓機屏幕怎麼改成蘋果的 瀏覽:49
用騰訊雲伺服器需要什麼app 瀏覽:23
微信流水賬單發到郵箱解壓不了 瀏覽:961
pubgmobile韓服安卓怎麼登錄 瀏覽:16
php小數轉百分數 瀏覽:476