linux下靜態庫和動態庫的建立及使用

2021-10-12 07:29:21 字數 1171 閱讀 8595

靜態庫的製作:

1 將.c檔案編譯成.o檔案

gcc -c fun1.c fun2.c

2 使用ar命令將.o檔案打包成.a檔案

ar rcs libtest1.a fun1.o fun2.o

靜態庫的使用:

1 main.c與head.h和libtest1.a在同一級目錄的情況

gcc -o main1 main.c -i./ -l./ -ltest1

2 main.c與head.h和libtest1.a在不同一級目錄的情況

gcc -o main1 main.c -i./include -l./lib -ltest1

動態庫的製作:

1 將.c檔案編譯成.o檔案

gcc -fpic -c fun1.c fun2.c

2 使用gcc將.o檔案編譯成庫檔案

gcc -shared fun1.o fun2.o -o libtest2.so

動態庫的使用:

gcc -o main2 main.c -i./include -l./lib -ltest2

(注意:標頭檔案預設查詢目錄:/usr/include,動態庫預設查詢目錄:/usr/lib,當頭檔案及庫檔案所在目錄為系統預設目錄時,不需要指定-i和-l,否認必須指定)

ldd命令可以檢視可執行檔案依賴的庫檔案,執行ldd 可執行檔名,可以發現找不到的動態庫

對於elf格式的可執行程式,是由ld-linux.so*來完成的, 它先後搜尋elf檔案的 dt_rpath段 — 環境變數ld_library_path — /etc/ld.so.cache檔案列表 — /lib/, /usr/lib目錄找到庫檔案後將其載入記憶體。

使用file命令可以檢視檔案的型別: file main

###執行提示動態庫找不到怎麼辦?重要

1.sudo vi /etc/ld.so.conf,加入動態庫路徑,執行sudo ldconfig -v

2.最常用的解決辦法:將ld_library_path環境變數加到使用者級別的配置檔案~/.bashrc中,

然後生效(. ~/.bashrc 或者 source ~/.bashrc 退出終端然後再登入)

3.修改系統級別環境變數,vim /etc/profile,後,export ld_library_path=$ld_library_path:庫路徑。

linux 下靜態庫和動態庫

我們通常把一些公用函式製作成函式庫,供其它程式使用。函式庫分為靜態庫和動態庫兩種。靜態庫在程式編譯時會被連線到目標 中,程式執行時將不再需要該 靜態庫。動態庫在程式編譯時並不會被連線到目標 中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在。本文主要通過舉例來說明在 linux中如何建立...

linux下的靜態庫和動態庫

庫是什麼?在我們實際程式設計中,經常會引入各種庫函式,那麼庫是什麼?從本質上來說是一種可執行 的二進位制格式,可以被載入記憶體中執行。庫分靜態庫和動態庫兩種。靜態庫 linux下靜態庫的名字一般是lib a,為庫的名字。利用靜態函式庫編譯成的檔案比較大,因為整個函式庫的所有資料都會被整合進目標 中,...

linux下的靜態庫和動態庫

意義 為了避免 的重寫率,我們可以將已經寫好的 形成乙個庫,當我們再次用到的時候可以直接呼叫,而不是重新去寫,即 站在巨人的肩膀上 linux下有兩種庫 一 靜態庫 準備工作 int swap int x,int y include int main 1 將我們需要的函式生成乙個.o 檔案 root...