gcc生成靜態庫和動態庫

2021-08-25 00:05:44 字數 580 閱讀 1195

假設當前目錄下有這些原始檔:[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

生成動態庫:

$ gcc -fpic -c func.c -o func.o

$ gcc -shared -o libfunc.so.1.0.0 func.o

$ ln -s libfunc.so.1.0.0 libfunc.so

$ gcc main.c -o main -l. -lfunc

$ export ld_library_path=$(pwd)

$ ./main

如果將so檔案copy到系統lib目錄(如/usr/lib),則最後2步就不用了。

最後還有3個小知識:

nm命令:列出目標檔案或2進製檔案的所有符號。

ldd命令:列出為了使程式正常執行所需要的所有共享庫。

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

linux下的庫有兩種 靜態庫和共享庫 動態庫 二者的不同點在於 被載入的時刻不同。靜態庫在程式編譯時會被連線到目標 中,目標程式執行時將不再需要該動態庫,移植方便,體積較大,但是浪費空間和資源,因為所有相關的物件檔案與牽涉到的庫被鏈結合成乙個可執行檔案。動態庫在程式編譯時並不會被連線到目標 中,而...

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

首先,庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。在linux下分為兩種,靜態庫和共享庫 動態庫 對比兩者的區別如下 庫的種類 描述優點 缺點靜態庫 目標檔案的簡單集合,linux下以.a作為字尾,程式編譯時載入 程式所需庫被載入後不會發生跨平台不相容等類似的問題 由於所需的 被載...

gcc 靜態庫和動態庫

include void print hello include include hello.h int main define hello 9999 void print hello 其中 hello.c 和 main.c 在同乙個目錄下,hello.h在上乙個目錄。先生成 o 檔案 gcc he...