先來看個例子:
先寫一下實現加減功能的子函式。主函式要呼叫另乙個c檔案裡面的函式,一般是通過共同包含同乙個.**件實現的。
// filename add_minus.h
#ifndef __add_minus_h__
#define __add_minus_h__
int add(int a, int b);
int minus(int a, int b);
#endif /*__add_minus_h__*/
我們的功能函式add_minus.c:
// filename add_minus.c
#include"add_minus.h"
int add(int a, int b)
int minus(int a, int b)
gcc -c add_minus.c
編譯生成 add_minus.o
ar rc libadd_minus.a add_minus.o
生成靜態庫
主函式:
#include#include"add_minus.h"
int main()
gcc -c main.c
生成main.o
上節的1~3已經得到了libadd_minus.a和main.o檔案,這一步需要把這兩個檔案鏈結起來
gcc -o main2 main.o -l./ -ladd_minus
說明1:-l./表明庫檔案位置在當前資料夾
說明2: -ladd_minus 表示鏈結 libadd_minus.a 檔案,使用「-l」引數時,字首「lib」和字尾「.a」是需要省略的。
1、是否鏈結成功
靜態庫鏈結
所有的編譯系統都提供一種機制,將所有相關的目標模組打包成為乙個單獨的檔案,成為靜態庫它可以用作鏈結器的輸入。當鏈結器構造乙個輸出的可執行檔案時,它只複製靜態庫里被應用程式引用的目標模組。這裡我們要用到三個簡單的c語言程式addvec.c multvec.c和main2.c。int addcnt 0 ...
靜態庫鏈結
在一般的情況下,一種語言的開發環境往往會附帶有語言庫 language library 這些庫就是對作業系統的api的包裝。其實乙個靜態庫可以簡單地看成一組目標檔案的集合,即很多目標檔案經過壓縮打包後形成的乙個檔案。我們知道在乙個c語言的執行庫中,包含了很多跟系統功能相關的 比如輸入輸出 檔案操作 ...
靜態庫,靜態鏈結,動態鏈結 的區別
遺憾地說 除了ender說的 靜態庫在程式執行時就會裝入記憶體,而動態庫在呼叫的時候才裝入!是正確的外,其他觀點都有偏頗之處甚至是錯誤的。我的感覺是,大家受mfc的影響太深了,而沒有看到事情的本質。首先糾正所謂 靜態連線就是把需要的庫函式放進你的exe之中 的說法。在真實世界中,有三個概念 use ...