真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C之編譯和鏈接(十八)

        我們平時所做的編譯工作其實是由編譯器來完成的,那么編譯器都是由哪幾部分構(gòu)成的呢?包括四大部分:預(yù)處理器、編譯器、匯編器以及鏈接器組成。我們來看看一個由 file.c 文件是怎樣得到 file.o 文件的,如下

站在用戶的角度思考問題,與客戶深入溝通,找到芒康網(wǎng)站設(shè)計與芒康網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站建設(shè)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名申請、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋芒康地區(qū)。

C之編譯和鏈接(十八)

        a> 預(yù)編譯:處理所有的注釋,以空格代替;將所有的 #define 刪除并且展開所有的宏定義;處理條件編譯指令 #if, #ifdef, #elif, #else, #endif;處理 #include,展開被包含的文件;保留編譯器需要使用的 #pragma 指令。預(yù)處理指令示例:gcc -E file.c -o file.i

        b> 編譯:對預(yù)處理文件進行詞法分析、語法分析以及語義分析;在分析結(jié)束后進行代碼優(yōu)化并生成相應(yīng)的匯編代碼文件。詞法分析是指分析關(guān)鍵字,標識符及立即數(shù)等是否合法;語法分析是指分析表達式是否遵循語法規(guī)則;語義分析是指在語法分析的基礎(chǔ)上進一步的分析表達式是否合法。編譯指令示例:gcc -S file.i -o file.s

        c> 匯編:匯編器將匯編代碼轉(zhuǎn)變?yōu)闄C器可以執(zhí)行的指令,每條指令語句幾乎都對應(yīng)一條機器指令。匯編指令示例:gcc -c file.s -o file.o

        總得來說編譯過程分為預(yù)處理、編譯、匯編和鏈接四個階段,預(yù)處理就是處理注釋,宏以及已經(jīng)以 # 開頭的符號;編譯就是進行詞法分析、語法分析以及語義分析;匯編就是將匯編代碼翻譯為機器指令的目標文件。

        那么鏈接器的作用主要是把各個模塊之間相互引用的部分處理好,使得各個模塊之間能夠正確的銜接。它分為靜態(tài)鏈接和動態(tài)鏈接兩種。

        a> 靜態(tài)鏈接:指由鏈接器在鏈接時將庫的內(nèi)容直接加入到可執(zhí)行程序中。關(guān)系如下

C之編譯和鏈接(十八)

       Linux 下靜態(tài)庫的創(chuàng)建和使用:1、編譯靜態(tài)庫源碼:gcc -c lib.c -o lib.o;2、生成靜態(tài)庫文件:ar -q lib.a lib.o;3、使用靜態(tài)庫編譯:gcc main.c lib.a -o main.out

       b> 動態(tài)鏈接: 可執(zhí)行程序在運行時才動態(tài)加載庫進行鏈接,庫的內(nèi)容不會進入可執(zhí)行程序當(dāng)中。關(guān)系如下

C之編譯和鏈接(十八)

        Linux 下動態(tài)庫的創(chuàng)建和使用:1、編譯動態(tài)庫源碼:gcc -shared dlib.c -o dlib.so;2、使用動態(tài)庫編譯:gcc main.c ldl -o main.out;3、關(guān)鍵系統(tǒng)調(diào)用:dlopen:打開動態(tài)庫文件,dlsym:查找動態(tài)庫中的函數(shù)并返回調(diào)用地址,dlclose:關(guān)閉動態(tài)庫文件。

        總得來說,鏈接是指將目標文件最終鏈接為可執(zhí)行程序。根據(jù)鏈接方式的不同,鏈接過程可分為:靜態(tài)鏈接,將目標文件直接鏈接進可執(zhí)行程序;動態(tài)鏈接,在程序啟動后才動態(tài)加載目標文件。后面我們會繼續(xù)對 C 語言的學(xué)習(xí)。

         歡迎大家一起來學(xué)習(xí) C 語言,可以加我QQ:243343083。


名稱欄目:C之編譯和鏈接(十八)
網(wǎng)站地址:http://weahome.cn/article/iheijh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部