c程序的編譯執行過程
A. 寫了一個程序可以編譯c語言,怎麼自動再鏈接然後執行生成的可執行文件
編譯的大致過程如下:
你完成的其實是前面一部分,的第一階段,生成了中間代碼。
目標代碼,即目標文件包含著機器代碼(可直接被計算機中央處理器執行)以及代碼在運行時使用的數據,如重定位信息,如用於鏈接或調試的程序符號(變數和函數的名字),此外還包括其他調試信息。
後面是由鏈接程序將編譯後形成的一組目標模塊以及它們所需要的庫函數鏈接在一起,形成一個完整的載入模塊。
目前的編譯工具通常編譯器和鏈接器都是分開,例如GNU的編譯器是gcc,鏈接器是ld
B. 涓婃満榪愯屼竴涓猚紼嬪簭鐨4涓姝ラ
涓婃満榪愯屼竴涓狢紼嬪簭鐨勬ラや富瑕佸寘鎷浠ヤ笅鍑犱釜錛
1. 緙栧啓浠g爜錛氶栧厛錛屼綘闇瑕佺紪鍐機紼嬪簭銆備綘鍙浠ヤ嬌鐢ㄤ換浣曟枃鏈緙栬緫鍣錛屽傝頒簨鏈錛孲ublime Text錛屾垨鑰呮洿涓撲笟鐨勯泦鎴愬紑鍙戠幆澧冿紙IDE錛夛紝濡俈isual Studio Code錛孍clipse絳夈備綘鍙闇瑕佹寜鐓C璇璦鐨勮娉曡勫垯緙栧啓浠g爜鍗沖彲銆
2. 淇濆瓨浠g爜錛氬綋浣犲畬鎴愪唬鐮佺紪鍐欏悗錛屼綘闇瑕佸皢鍏朵繚瀛樹負涓涓.c鏂囦歡銆傜『淇濇枃浠跺悕涓庣▼搴忓悕縐扮浉鍖歸厤錛屽苟涓旀枃浠舵墿灞曞悕搴斾負.c銆
3. 緙栬瘧浠g爜錛氭帴涓嬫潵錛屼綘闇瑕佷嬌鐢–緙栬瘧鍣ㄥ皢浣犵殑浠g爜緙栬瘧鎴愬彲鎵ц屾枃浠躲傚湪Windows涓婏紝浣犲彲浠ヤ嬌鐢℅CC鎴朇lang絳夌紪璇戝櫒銆傚湪Linux鎴朚ac OS涓婏紝浣犲彲浠ヤ嬌鐢℅CC鎴朇lang鎴栧叾浠朇緙栬瘧鍣ㄣ傚叿浣撶殑緙栬瘧姝ラゅ彲鑳戒細鍥犵紪璇戝櫒鑰屽紓錛屼絾閫氬父浣犲彧闇瑕佸湪鍛戒護琛屼腑杈撳叆緙栬瘧鍛戒護鍗沖彲銆備緥濡傦紝瀵逛簬GCC錛屼綘鍙鑳介渶瑕佽緭鍏ョ被浼糮gcc your_file.c -o your_program`鐨勫懡浠ゃ
4. 榪愯岀▼搴忥細鏈鍚庯紝浣犲彲浠ヨ繍琛屼綘鐨勭▼搴忎簡銆傚湪Windows涓婏紝浣犲彲浠ラ氳繃鍙屽嚮鍙鎵ц屾枃浠舵潵榪愯屽畠銆傚湪Linux鎴朚ac OS涓婏紝浣犲彲浠ヤ嬌鐢ㄧ粓絝鏉ヨ繍琛岀▼搴忋傞氬父錛屼綘闇瑕佽緭鍏ョ被浼間簬`./your_program`鐨勫懡浠ゆ潵榪愯岀▼搴忋
鎷撳睍鐭ヨ瘑錛
榪欏洓涓姝ラょ湅璧鋒潵寰堢畝鍗曪紝浣嗗疄闄呬笂鍙鑳藉瓨鍦ㄤ竴浜涢棶棰樸備緥濡傦紝浣犲彲鑳介渶瑕佺『淇濅綘鐨勭幆澧冨凡緇忔g『閰嶇疆浜咰緙栬瘧鍣ㄣ備綘涔熼渶瑕佷簡瑙e備綍澶勭悊緙栬瘧閿欒鍜岃﹀憡銆傚湪鏌愪簺鎯呭喌涓嬶紝浣犲彲鑳介渶瑕侀槄璇誨拰鐞嗚В鐢熸垚鐨勯敊璇娑堟伅浠ユ壘鍑洪棶棰樻墍鍦ㄣ
鎬葷殑鏉ヨ達紝榪欐槸涓涓鐩稿圭畝鍗曠殑榪囩▼銆
瀵逛簬鍒濆﹁呮潵璇達紝榪欎粛鐒跺彲鑳介渶瑕佷竴浜涙椂闂村拰鑰愬績鏉ユ帉鎻°
鍚屾椂錛屽逛簬鏇村嶆潅鐨勭▼搴忓拰欏圭洰錛屼綘鍙鑳借繕闇瑕佽冭檻濡備綍緇勭粐浠g爜銆佸備綍綆$悊渚濊禆欏廣佸備綍璋冭瘯紼嬪簭絳夐棶棰樸
C. C語言文件的編譯與執行的四個階段並分別描述
開發C程序有四個步驟:編輯、編譯、連接和運行。
任何一個體系結構處理器上都可以使用C語言程序,只要該體系結構處理器有相應的C語言編譯器和庫,那麼C源代碼就可以編譯並連接到目標二進制文件上運行。
1、預處理:導入源程序並保存(C文件)。
2、編譯:將源程序轉換為目標文件(Obj文件)。
3、鏈接:將目標文件生成為可執行文件(EXE文件)。
4、運行:執行,獲取運行結果的EXE文件。
(3)c程序的編譯執行過程擴展閱讀:
將C語言代碼分為程序的幾個階段:
1、首先,源代碼文件測試。以及相關的頭文件,比如stdio。H、由預處理器CPP預處理為.I文件。預編譯的。文件不包含任何宏定義,因為所有宏都已展開,並且包含的文件已插入。我歸檔。
2、編譯過程是對預處理文件進行詞法分析、語法分析、語義分析和優化,生成相應的匯編代碼文件。這個過程往往是整個程序的核心部分,也是最復雜的部分之一。
3、匯編程序不直接輸出可執行文件,而是輸出目標文件。匯編程序可以調用LD來生成可以運行的可執行程序。也就是說,您需要鏈接大量的文件才能獲得「a.out」,即最終的可執行文件。
4、在鏈接過程中,需要重新調整其他目標文件中定義的函數調用指令,而其他目標文件中定義的變數也存在同樣的問題。
D. 開發一個C語言程序需要經過的四個步驟是什麼
開發C語言程序的四個步驟包括:
1. 編輯:在這個階段,開發者使用文本編輯器或集成開發環境(IDE)編寫C語言源代碼。源代碼通常保存為具有`.c`擴展名的文件。
2. 編譯:編譯器讀取源代碼文件,並將其轉換成機器語言指令的目標代碼。這個目標代碼通常以`.obj`或`.o`為文件擴展名保存。
3. 連接:連接器將多個目標代碼文件(`.obj`)以及庫文件(`.lib`)合並成一個可執行文件(`.exe`)。這個過程稱為「鏈接」,生成的可執行文件可以在操作系統中直接運行。
4. 運行:用戶執行生成的可執行文件,程序開始執行並輸出結果。這個階段是程序的最終測試階段,也是用戶與程序交互的開始。
每個步驟都對程序的正確性和功能至關重要。編輯確保代碼正確編寫,編譯確保代碼可以被處理器理解,連接確保所有必要的部分都在程序中,而運行則是執行程序並驗證其結果的階段。
E. 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文件,得到運行結果。