makefile鏈結靜態庫

2021-10-25 01:55:38 字數 959 閱讀 4702

先來看個例子:

先寫一下實現加減功能的子函式。主函式要呼叫另乙個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 ...