Linux 用gcc生成靜態庫和動態庫

2021-07-27 03:31:15 字數 1301 閱讀 5420

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 檢視庫檔案內所含目標檔案,顯示檔名 時間 ...