我們平時(shí)所做的編譯工作其實(shí)是由編譯器來完成的,那么編譯器都是由哪幾部分構(gòu)成的呢?包括四大部分:預(yù)處理器、編譯器、匯編器以及鏈接器組成。我們來看看一個(gè)由 file.c 文件是怎樣得到 file.o 文件的,如下
成都創(chuàng)新互聯(lián)公司成立與2013年,先為宜秀等服務(wù)建站,宜秀等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為宜秀企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。a> 預(yù)編譯:處理所有的注釋,以空格代替;將所有的 #define 刪除并且展開所有的宏定義;處理?xiàng)l件編譯指令 #if, #ifdef, #elif, #else, #endif;處理 #include,展開被包含的文件;保留編譯器需要使用的 #pragma 指令。預(yù)處理指令示例:gcc -E file.c -o file.i
b> 編譯:對(duì)預(yù)處理文件進(jìn)行詞法分析、語法分析以及語義分析;在分析結(jié)束后進(jìn)行代碼優(yōu)化并生成相應(yīng)的匯編代碼文件。詞法分析是指分析關(guān)鍵字,標(biāo)識(shí)符及立即數(shù)等是否合法;語法分析是指分析表達(dá)式是否遵循語法規(guī)則;語義分析是指在語法分析的基礎(chǔ)上進(jìn)一步的分析表達(dá)式是否合法。編譯指令示例:gcc -S file.i -o file.s
c> 匯編:匯編器將匯編代碼轉(zhuǎn)變?yōu)闄C(jī)器可以執(zhí)行的指令,每條指令語句幾乎都對(duì)應(yīng)一條機(jī)器指令。匯編指令示例:gcc -c file.s -o file.o
總得來說編譯過程分為預(yù)處理、編譯、匯編和鏈接四個(gè)階段,預(yù)處理就是處理注釋,宏以及已經(jīng)以 # 開頭的符號(hào);編譯就是進(jìn)行詞法分析、語法分析以及語義分析;匯編就是將匯編代碼翻譯為機(jī)器指令的目標(biāo)文件。
那么鏈接器的作用主要是把各個(gè)模塊之間相互引用的部分處理好,使得各個(gè)模塊之間能夠正確的銜接。它分為靜態(tài)鏈接和動(dòng)態(tài)鏈接兩種。
a> 靜態(tài)鏈接:指由鏈接器在鏈接時(shí)將庫(kù)的內(nèi)容直接加入到可執(zhí)行程序中。關(guān)系如下
Linux 下靜態(tài)庫(kù)的創(chuàng)建和使用:1、編譯靜態(tài)庫(kù)源碼:gcc -c lib.c -o lib.o;2、生成靜態(tài)庫(kù)文件:ar -q lib.a lib.o;3、使用靜態(tài)庫(kù)編譯:gcc main.c lib.a -o main.out
b> 動(dòng)態(tài)鏈接: 可執(zhí)行程序在運(yùn)行時(shí)才動(dòng)態(tài)加載庫(kù)進(jìn)行鏈接,庫(kù)的內(nèi)容不會(huì)進(jìn)入可執(zhí)行程序當(dāng)中。關(guān)系如下
Linux 下動(dòng)態(tài)庫(kù)的創(chuàng)建和使用:1、編譯動(dòng)態(tài)庫(kù)源碼:gcc -shared dlib.c -o dlib.so;2、使用動(dòng)態(tài)庫(kù)編譯:gcc main.c ldl -o main.out;3、關(guān)鍵系統(tǒng)調(diào)用:dlopen:打開動(dòng)態(tài)庫(kù)文件,dlsym:查找動(dòng)態(tài)庫(kù)中的函數(shù)并返回調(diào)用地址,dlclose:關(guān)閉動(dòng)態(tài)庫(kù)文件。
總得來說,鏈接是指將目標(biāo)文件最終鏈接為可執(zhí)行程序。根據(jù)鏈接方式的不同,鏈接過程可分為:靜態(tài)鏈接,將目標(biāo)文件直接鏈接進(jìn)可執(zhí)行程序;動(dòng)態(tài)鏈接,在程序啟動(dòng)后才動(dòng)態(tài)加載目標(biāo)文件。后面我們會(huì)繼續(xù)對(duì) C 語言的學(xué)習(xí)。
歡迎大家一起來學(xué)習(xí) C 語言,可以加我QQ:243343083。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享名稱:C之編譯和鏈接(十八)-創(chuàng)新互聯(lián)
本文來源:http://jinyejixie.com/article0/hgiio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、面包屑導(dǎo)航、網(wǎng)站建設(shè)、網(wǎng)站制作、品牌網(wǎng)站建設(shè)、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容
移動(dòng)網(wǎng)站建設(shè)知識(shí)