中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C之編譯和鏈接(十八)

發布時間:2020-05-23 00:38:51 來源:網絡 閱讀:584 作者:上帝之子521 欄目:編程語言

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

C之編譯和鏈接(十八)

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

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

        c> 匯編:匯編器將匯編代碼轉變為機器可以執行的指令,每條指令語句幾乎都對應一條機器指令。匯編指令示例:gcc -c file.s -o file.o

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

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

        a> 靜態鏈接:指由鏈接器在鏈接時將庫的內容直接加入到可執行程序中。關系如下

C之編譯和鏈接(十八)

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

       b> 動態鏈接: 可執行程序在運行時才動態加載庫進行鏈接,庫的內容不會進入可執行程序當中。關系如下

C之編譯和鏈接(十八)

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

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


         歡迎大家一起來學習 C 語言,可以加我QQ:243343083

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南和县| 勐海县| 集贤县| 怀集县| 盘锦市| 惠水县| 勃利县| 德州市| 思茅市| 北川| 浦江县| 凯里市| 嫩江县| 海南省| 桦南县| 微山县| 南溪县| 马龙县| 沽源县| 大宁县| 金山区| 饶河县| 平阴县| 府谷县| 内江市| 峨眉山市| 蚌埠市| 新绛县| 安福县| 武宣县| 浮梁县| 无极县| 白河县| 南岸区| 建宁县| 金堂县| 额济纳旗| 武威市| 沁阳市| 丽水市| 玉屏|