『壹』 開發一個c語言程序要經過哪四個步驟
開發一個C語言程序需要經過的四個步驟:編輯、編譯、連接、運行。
C語言程序可以使用在任意架構的處理器上,只要那種架構的處理器具有對應的C語言編譯器和庫,然後將C源代碼編譯、連接成目標二進制文件之後即可運行。
1、預處理:輸入源程序並保存(.C文件)。
2、編譯:將源程序翻譯為目標文件(.OBJ文件)。
3、鏈接:將目標文件生成可執行文件( .EXE文件)。
4、運行:執行.EXE文件,得到運行結果。
(1)c語言鏈接過程擴展閱讀:
C語言代碼變為程序的幾個階段:
1、首先是源代碼文件test.c和相關的頭文件,如stdio.h等被預處理器cpp預處理成一個.i文件。經過預編譯後的.i文件不包含任何宏定義,因為所有的宏已經被展開,並且包含的文件也已經被插入到.i文件中。
2、編譯過程就是把預處理完的文件進行一系列的詞法分析、語法分析、語義分析以及優化後產生相應的匯編代碼文件,這個過程往往是我們所說的整個程序的構建的核心部分,也是最復雜的部分之一。
3、匯編器不直接輸出可執行文件而是輸出一個目標文件,匯編器可以調用ld產生一個能夠運行的可執行程序。即需要將一大堆文件鏈接起來才可以得到「a.out」,即最終的可執行文件。
4、在鏈接過程中,對其他定義在目標文件中的函數調用的指令需要被重新調整,對實用其他定義在其他目標文件的變數來說,也存在同樣問題。
參考資料來源:網路-c語言
『貳』 C語言模塊的編譯與連接過程
gcc a.c -o a.o -c
gcc b.c -o b.o -c
ld a.o b.o -lcrtdll -o ab.exe
編譯就是把代碼編譯成中間格式(win32、coff、elf等),連接就是把中間格式的文件加上頭組合成真正的可執行程序。編譯的時候檢查語法錯誤,連接的時候檢查連接的庫是否完整,是否所有導入符號都有實際定義等等。
『叄』 c語言 tc環境的具體鏈接編譯運行步驟
ctrl-f9
寫好後就這樣就可以運行了啊!
你說的連接那些都是自動完成的。
『肆』 C語言的編譯、鏈接、載入、運行全過程
C語言的編譯、鏈接、載入、
『伍』 c語言裡面的編譯和鏈接是怎麼回事啊
C/C++語言的完整編譯過程是
一、預編譯
處理#define #if #include這類#開頭的語句,這些稱為預編譯指令。這個過程中會把.h文件和.c/.cpp文件組合成最終交給compile過程的原文件。這個原文件是不包含任何#開頭的語句的。所有#define定義的宏也會被替換。
二、編譯
把上面那個原文件編譯成.o或者VC里是.obj文件。這個文件保存了機器碼化的函數、函數的描述、全局變數的描述、乃至段的描述等等。
三、連接
把可執行程序需要的所有的編譯過程產生的.o或者.obj文件組合到一起。(這里也包括.lib文件,.lib文件件本質上就是打包的.obj文件集合)。另外連接過程還會組合一些其他數據,比如資源、可執行文件頭等等。
『陸』 問個C語言的編譯鏈接問題
頭文件是用來說明函數介面和數據結構的,不是靜態鏈接庫。
靜態庫(在windows下是lib文件,linux下是.a文件)和動態庫(windows下是dll文件,linux下是.so文件)是庫文件的兩種形式,都是在鏈接階段完成;區別在於靜態庫在鏈接時和應用程序打包在了一起,動態庫只是做了一些指向修改的事情,待到應用程序實際執行時,才載入該動態庫到內存。
可以看一下「程序員的自我修養」這本書
『柒』 C語言程序鏈接
程序中用的是相對位置(offset),相對這某一個開始點。
當程序被載入前,開始點是不確定的,但每塊數據的相對位置是確定的。
但載入後,可是點是確定的,這樣,很容易得到數據的位置:開始點+相對位置。
『捌』 C語言 四個過程:預處理,編譯,匯編,鏈接,分別進行了什麼過程別度娘。
預處理:替換代碼中的預處理命令(宏定義就是在這里直接替換的)
編譯:對代碼按執行順序進行編譯成.o或.obj目標文件
匯編:將其他高級語言轉換成機器語言
鏈接:代碼中的各種調用關系重定位
『玖』 宏和函數的區別以及C語言的編譯鏈接過程
宏在編譯之前,需要進行預處理,將宏直接提換成宏定義的代碼,是直接替換,也就是說,在預處理之後,你再看代碼,發現宏定義已經被替換過來了,你看到是你定義之後的那一串代碼。
而函數,在編譯之後,有一系列調用函數的過程,比如,傳參,壓棧等,這部分是編譯器所做的。
C 語言編譯鏈接過程:
test.c(原始代碼) --> 預處理 --> test.i(經過預處理的)--> 編譯 --> test.s(匯編代碼)--> 匯編 --> test.o(目標文件,其實這部分已經是單個文件的完整二進制文件了,只是還不能執行,如果不懂這句話,可以再問我,其實這部分知識,平時也很少遇到) --> 鏈接 --> test (可執行文件,比如一個程序由3個代碼文件共同生成,那麼就會有3個.o格式目標文件,鏈接是把多個目標文件真正的聯系在一起,比如a.o 中使用了 b.o中的一個函數,那麼它們兩個之間的地址是如何確定的(同理,可引申到使用函數庫的問題,使用printf函數,也是需要鏈接器進行確定printf函數地址,才能知道如何調用。)這個就是鏈接器的作用)