linux下的庫有兩種:靜態庫和共享庫(動態庫)。
二者的不同點在於**被載入的時刻不同。
靜態庫在程式編譯時會被連線到目標**中,目標程式執行時將不再需要該動態庫,移植方便,體積較大,但是浪費空間和資源,因為所有相關的物件檔案與牽涉到的庫被鏈結合成乙個可執行檔案。
動態庫在程式編譯時並不會被連線到目標**中,而是在程式執行時才被載入,因此體積較小,可以實現程序間的資源共享,甚至可以真正做到鏈結載入完全由程式設計師在程式**中控制,另外將一些程式的公升級變得簡單,但是在程式執行時需要動態庫存在.
在linux中靜態庫均以.a為檔名字尾,動態庫均以.so為檔名字尾
首先先寫三個**,hello.h
#ifndef _hello_h
#define _hello_h
void hello(const char* str);
#endif
hello.c
#includevoid hello(const char * str)
test.c
#include"hello.h"
int main()
gcc生成靜態庫
我們用gcc -o 來編譯test.c發現不能成功,因為test.c不能把hello.c裡內容也一同編譯
下面我們將hello.c用gcc -c 生成乙個編譯檔案 ls
生成了乙個hello.o檔案
下面我們用指令將hello.o生成乙個靜態庫libmyhello.a檔案,與庫檔案中檔案命名要統一
指令 ar -r libmyhello.a hello.o
ls後發現系統中多了乙個libmyhello.a檔案 執行
gcc -o test test.c libmyhello.a
生成test,執行./test
hello sgc
使用 ar -t libmyhello.a檢視靜態庫libmyhello.a中包含的檔案
hello.o
gcc生成動態庫
執行兩條命令
gcc -shared -fpic -c hello.c
gcc -shared -fpic -o libmyhello.so hello.o
即可生成乙個動態庫libmyhello.so
執行命令
gcc -o hello main.c -l. -lmyhello
生成hello檔案
./hello後
hello sgc
Linux 使用gcc生成靜態庫和動態庫
首先,庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。在linux下分為兩種,靜態庫和共享庫 動態庫 對比兩者的區別如下 庫的種類 描述優點 缺點靜態庫 目標檔案的簡單集合,linux下以.a作為字尾,程式編譯時載入 程式所需庫被載入後不會發生跨平台不相容等類似的問題 由於所需的 被載...
gcc生成靜態庫和動態庫
假設當前目錄下有這些原始檔 main.c func.c func.h 其中main.c要呼叫func.c中的函式。生成靜態庫 gcc c func.c o func.o ar rcs libfunc.a func.o gcc main.c o main static l.lfunc main 生成動...
linux 靜態庫和動態庫生成
靜態庫 ar rcs lib a xx1.o xx2.o 生成靜態庫 c 建立乙個庫 s 建立目標檔案索引,在建立較大的庫時,能加快時間 rablib lib a 為庫檔案建立索引。ar t lib a 檢視庫檔案內所含目標檔案名字 ar tv lib a 檢視庫檔案內所含目標檔案,顯示檔名 時間 ...