導航:首頁 > 源碼編譯 > cpp編譯到執行過程

cpp編譯到執行過程

發布時間:2022-12-21 16:33:02

Ⅰ gcc -o hello hello.c 執行過程

hello.c

預處理器(cpp)根據以字元#開頭的命令,修改原始的c程序。比如hello.c中的第1行#include <stdio.h>命令告訴預處理器讀取系統頭文件stdio.h的內容,並把它直接插入程序文本中。結果就得到了一個c程序,通常是以.i作為文件擴展名。

編譯器(ccl)將文本文件hello.i翻譯成文本文件hello.s,它包含一個匯編語言程序。

匯編器(as)將hello.s 翻譯成機器語言指令,把這些指令打包成一種叫做可重定位目標程序的格式,並將結果保存在目標文件hello.o中。hello.o是一個二進制文件,它包含的17個位元組是函數main的指令編碼。如果我們在文本編輯器中打開hello.o文件,將看到一堆亂碼。

請注意,hello程序調用了printf函數,它是每個c編譯器都提供的標准c庫中的一個函數。printf函數存在於一個名為printf.o的單獨的預編譯好了的目標文件中,而這個文件必須以某種方式合並到我們的hello.o程序中。鏈接器(ld)就負責處理這種合並。結果就得到hello文件,它是一個可執行目標文件,可以被載入到內存中,由系統執行。

Ⅱ C語言源程序的編譯過程包括哪三個階段

編譯:將源程序轉換為擴展名為.obj的二進制代碼
連接:將obj文件進行連接,加入庫函數等生成可執行文件
運行:執行可執行文件,有錯返回修改,無錯結束

Ⅲ 設有程序1.cpp編譯後運行該程序,執行的是什麼文件

設有程序1.cpp編譯後運行該程序,執行的是1.exe,設有程序1.cpp編譯後運行該程序,執行的是1.exe。

Ⅳ C/C++語言編譯生產可執行的二進制文件的過程求大神詳盡解釋,

  1. 預編譯。編譯器將你的.c、.cpp源代碼,通過解釋其中的預編譯指令,將源代碼轉換成相應的沒有任何預編譯指令的代碼。

  2. 編譯、優化。將上一步的代碼編譯成匯編指令,並作一定優化,形成對應的.s匯編代碼

  3. 匯編。將.s文件匯編成機器碼,形成對應的.o目標文件,此時是不可執行的二進制文件。生成對應的清單文件。為了連接需要,還會生成未定向符號表、導出符號表、地址重定向表等等。

  4. 連接。先根據對應的清單文件、連接文件及之間的調用關系,決定所有的目標文件及引用的庫文件在最後可執行文件中的位置;然後做一些其他事情,比如根據符號表等將目標文件中的符號地址補全等等;最終得到可執行文件。

這只是我個人的簡單理解,更詳盡的解答都可以寫成好幾本書了=_=望採納~

Ⅳ C語言源程序到運行程序經過哪幾個步驟

1、預處理

在這一階段,源碼中的所有預處理語句得到處理,例如:#include語句所包含的文件內容替換掉語句本身,所有已定義的宏被展開。

根據#ifdef,#if等語句的條件是否成立取捨相應的部分,預處理之後源碼中不再包含任何預處理語句。

GCC預處理階段可以生成.i的文件,通過選項-E可以使編譯器在預處理結束時就停止編譯。例如:gcc -E -o hello.i hello.c

2、編譯

這一階段,編譯器對源碼進行詞法分析、語法分析、優化等操作,最後生成匯編代碼。這是整個過程中最重要的一步,因此也常把整個過程稱為編譯。

可以通過選項-S使GCC在進行完編譯後停止,生成.s的匯編程序。例如:gcc -S -o hello.s hello.c

3、匯編

這一階段使用匯編器對匯編代碼進行處理,生成機器語言代碼,保存在後綴為.o的目標文件中。

當程序由多個代碼文件構成時,每個文件都要先完成匯編工作,生成.o目標文件後,才能進入下一步的鏈接工作。

目標文件已經是最終程序的某一部分了,只是在鏈接之前還不能執行。可以通過-c選項生成目標文件:gcc -c -o hello.o hello.c

4、鏈接

經過匯編以後的機器代碼還不能直接運行。為了使操作系統能夠正確載入可執行文件,文件中必須包含固定格式的信息頭,還必須與系統提供的啟動代碼鏈接起來才能正常運行,這些工作都是由鏈接器來完成的。gcc -o hello hello.c

5、運行:執行.EXE文件,得到運行結果。

Ⅵ C++編譯時,是從哪一個cpp開始的,然後各cpp的編譯順序是如何定的

編譯順序由你在編譯設置里決定
其實編譯順序並不重要
最終的連接過程是產生可執行文件的最終步驟,只要保證連接時所有的目標文件都存在就行了

比如一個小程序包括兩個文件
//main.cpp
extern int a;
int main(void){
printf("%d\n",a);
a=5;
printf("%d\n",a);
}
//var.cpp
int a=2;
----
gcc -c main.cpp
gcc -c var.cpp//這兩步可以換過來
gcc main.o var.o//這兩個參數也可以換過來

輸出
2
5

Ⅶ C語言編譯執行的全過程是怎樣的

預處理階斷:這個就是那些#include啥的。
編譯階斷:把C語言的代碼轉成匯編語言代碼,比如 int a = 2; 它會生成mov a, 2;
匯編階斷:把匯編代碼轉換成機器碼,比如把mov a , 2 ; 轉成 cd07 (mov指令的機器碼中的一種機器碼)
鏈接階斷:製作成一個可執行文件,比如windows是PE的可執行文件,linux是elf的可執行文件,要製作成可以運行的程序。

Ⅷ 怎樣將cpp文件編譯成可執行文件

可以反匯編,返匯編出的結果的執行的效果相同,但代碼差距很大。一些破解軟體、漢化軟體等就是用這個原理看到作者的編程思路,從而找到軟體的漏洞

Ⅸ C++程序從寫代碼到顯示出結果共包括哪四個步驟,前三步分別形成什麼文件,文件擴展名分別是什麼。

第一個階段:預處理階段,在正式的編譯階段之前進行。預處理階段將根據已放置在文件中的預處理指令來修改源文件的內容。如#include指令就是一個預處理指令,它把頭文件的內容添加到.c或.cpp文件中。

第二個階段:編譯、優化階段,將其翻譯成等價的中間代碼表示或匯編代碼,並執行優化。

第三個階段:匯編,把匯編語言代碼翻譯成目標機器指令。

第四個階段:鏈接,例如,某個源文件中的函數可能引用了另一個源文件中定義的某個符號(如變數或者函數調用等);在程序中可能調用了某個庫文件中的函數,等等。所有的這些問題,都需要經鏈接程序的處理方能得以解決。

-----------------------------------------------

  1. 源代碼文件:".c";

  2. 目標代碼文件:".obj";

  3. 可執行文件:".exe";

    ".c"文件"compile"後生成".obj"文件;
    ".obj"文件"link"後生成".exe"文件。

Ⅹ C++ 程序的編譯過程…

一般來講,編好的代碼(源代碼)經過編譯,鏈接,生成可執行的文件,然後就可以執行。即編輯的代碼要最重生成可執行的程序(可執行的文件),需要經過編譯、鏈接兩個步驟。編譯的作用是對代碼進行語法檢查,而鏈接的作用是鏈接代碼中用到的編譯器提供的資源。所以,通常通過編譯、鏈接後形成的只形成一個可執行的文件。

但是,假如你是採用工程的形式進行編程的話,工程包括很多個文件,比如,VC編程中MFC編程。這個時候源代碼通過鏈接後就形成的是多個文件!

中型程序是什麼語言寫的,這個問題恐怕語言專家也不好回答,因為每種語言,比如C、C++、JAVA等等都可以寫中型程序,而且都是各有優缺點。但是,根據編程的用途,各種語言根據自身的特點可以針對性的使用,如游戲編程一般使用...語言,而系統軟體編程一般使用...語言,這種說法可能更有使用價值一些。

閱讀全文

與cpp編譯到執行過程相關的資料

熱點內容
php開發客戶端 瀏覽:996
theisle測試服怎麼搜伺服器 瀏覽:445
廣播PDF 瀏覽:216
單片機編程300例匯編百度 瀏覽:33
騰訊雲連接不上伺服器 瀏覽:221
不能用來表示演算法的是 瀏覽:859
6軸機器人演算法 瀏覽:890
手機主題照片在哪個文件夾 瀏覽:294
安卓手機後期用什麼軟體調色 瀏覽:628
cad修改快捷鍵的命令 瀏覽:242
好錢包app怎麼登錄不了 瀏覽:859
樹莓派都用python不用c 瀏覽:757
access文件夾樹的構造 瀏覽:662
安卓多指操作怎麼設置 瀏覽:658
linux樹形目錄 瀏覽:727
平方根的簡單演算法 瀏覽:898
千牛訂單頁面信息加密取消 瀏覽:558
單片機自製紅外遙控燈 瀏覽:719
伺服器最小配置怎麼弄 瀏覽:853
ibm伺服器硬體如何升級 瀏覽:923