linux程式設計動態庫和靜態庫的製作及編譯過程

2021-10-07 19:44:11 字數 1720 閱讀 8923

例如編寫乙個main.c檔案和乙個fun.c檔案

main.c:

#include

intadd

(int

,int);

intmain

(void

)

fun.c:

int

add(

int a,

int b)

然後執行此命令:

gcc -c fun.c
此時會生成目標檔案fun.o

執行此命令:

ar -cr lib***.a fun.o
此時會建立生成乙個靜態庫,庫名為lib***.a,***是你自己定義的名字

c:create

r:replace

執行此命令:

gcc file.c -l ./ -l ***
-l:指定靜態函式庫的位置供查詢,』./'表示靜態函式庫在本目錄下查詢

-l:指定靜態函式庫名

此時會生成可執行檔案a.out

執行

./a.out
即輸出

a + b = 7
gcc -c fun.c
此時生成目標檔案fun.o

執行此命令:

gcc -shared -fpic fun.o -o lib***.so
-shared:生成共享庫

-fpic:產生位置無關**

此時會生成乙個動態庫,庫名為lib***.so

執行此命令:

gcc main.c -l ./ -l ***
此時會生成可執行檔案a.out

執行./a.out命令,此時發現會報錯

no such file or directory...
因為動態庫在使用時,會查詢/usr/lib/目錄下的動態函式庫,而此時我們生成的lib***.so不在這個目錄下。

所以接下來第一種方法可以將這個動態庫移動到這個目錄下,執行命令

sudo mv lib***.so /usr/lib/
再次執行./a.out命令,輸出a + b = 7。

第二種方法可以將生成的動態庫的目錄新增到環境變數ld_library_path中去

執行此命令

sudo export ld_library_path=/...
/…表示你建立生成動態庫的路徑

此時再次執行./a.out,輸出a + b = 7。

還有第三種方法是修改配置指令碼,將生成的動態庫的目錄加到/etc/ld.so.conf中去

執行此命令

sudo vi /etc/ld.so.conf
在此文件中加入你生成動態庫的目錄,儲存退出。

然後執行以下命令

ldconfig /etc/ld.so.conf
接著執行./a.out,輸出a + b = 7。

Linux動態庫和靜態庫基礎

example hello.c hello.h main.c 1.靜態庫 gcc c hello.c ar cr libhello.a hello.o 引用庫 lhello 2.動態庫 gcc c hello.c gcc shared fpci o libhello.so hello.o 引用庫 l...

動態庫和靜態庫

本文主要解決以下幾個問題 1 為什麼要使用庫?2 庫的分類 3 建立自己的庫 或許大家對自己初學linux時的情形仍記憶尤新吧。如果沒有乙個能較好的解決依賴關係的包管理器,在linux下安裝軟體將是一件及其痛苦的工作。你裝a包時,可能會提示你要先裝b包,當你費盡心力找到b包時,可能又會提示你要先安裝...

動態庫和靜態庫

先抄一段 windows下的動態庫和靜態庫區別解釋,其實linux下意義一樣的,不過字尾名有些區別 靜態庫 在編譯的時候載入生成目標檔案,在執行時不用載入庫,在執行時對庫沒有依賴性。動態庫 在目標檔案執行時載入,手動載入,且對庫有依賴性。兩者區別 一,靜態庫的使用需要 1 包含乙個對應的標頭檔案告知...