問題
工程中的每個c語言原始檔被編譯後生產目標檔案,這些檔案如何生成最終的可執行程式?
鏈結器的主要作用是把各個模組之間相互引用的部分處理好,使得模組之間能夠爭取的銜接。
靜態鏈結
由鏈結器在鏈結時將庫的內容直接加入到可執行程式中。
在linux靜態庫下的建立和使用:
1)編譯靜態庫原始碼:gcc –c lib.c –olib.o(目標檔案)
2)生成靜態庫檔案:ar–q lib.a lib.o(打包)
3)使用靜態庫編譯:gcc main.c lib.a –o main.out (lib.a相當於乙個檔案包,叫做靜態庫)
動態鏈結(執行時再到動態庫中查詢內容)
1)可執行程式在執行時才動態載入庫進行鏈結;
2)庫的內容不會進入可執行程式當中。
sub1和sub2是動態庫暴露出來告訴編譯器所能提供的內容(有用的部分)
在linux動態庫下的建立和使用:
1)編譯動態庫原始碼:gcc –shared dlib.c –odlib.so(目標檔案)
2)使用動態庫編譯:gcc main.c –ldl –o main.out
3)關鍵系統呼叫:
a> dlopen:開啟動態庫檔案
c> dlclose:關閉動態庫檔案
小結:1)鏈結是指將目標檔案最終鏈結為可執行程式;
C 學習 C語言編譯鏈結過程
將乙個字尾為.c的原始檔轉換為可執行檔案的過程就是編譯與鏈結。對於編譯階段分為兩個階段 編譯 彙編 編譯階段又分為預處理階段 編譯優化階段。預處理階段 預處理階段根據檔案中的預處理指令來對原始檔進行修改。主要包括 巨集定義指令 條件編譯指令 標頭檔案包含指令 特殊符號。因此預編譯階段就是對原始檔的替...
C語言高階剖析 20 鏈結過程簡介
鏈結器的意義linux 下靜態庫的建立和使用 test.c include extern char name extern int add int a,int b int main slib.c char name intadd int a,int b gcc c slib.c o slib.o a...
c語言編譯 鏈結過程
c語言的編譯鏈結過程 把c程式 源 轉換成可以在機器上執行的程式 可執行 需要進行編譯和鏈結的過程。1 編譯 主要包含兩個過程 1 預處理 巨集定義 檔案包含 條件編譯。在正式開始編譯之前根據預處理命令來修改原始檔的內容 2 編譯 優化 通過詞法分析和語法分析將指令翻譯成彙編 2 彙編 把組合語言 ...