C語言 靜態庫與動態庫

2021-09-02 14:12:36 字數 1418 閱讀 2913

一.靜態庫

靜態庫: 要被包含到源程式中的庫

1.優點執行速度快

2.缺點占用系統資源比較多

3.使用的場合對時間要求很高的場合

4.靜態庫的製作

(1)把所有的源程式(.c檔案)製作成目標檔案(.o 檔案)

gcc -c mul.c -o mul.o

gcc -c sub.c -o sub.o

gcc -c add.c -o add.o

(2)使用工具將所有 .o 打包生成靜態庫檔案(靜態庫的字尾名是 .a )

ar rcs lib庫名.a mul.o sub.o add.o

(3)編譯的時候 gcc 庫包含的相關命令

-l 庫檔案所在的目錄

-l(l的小寫) 包含要新增到程式中的庫,後面跟庫名即可

-i(i的大寫) 指定標頭檔案所在路徑

gcc 2.c -l/home -lmylib -i…/

二.動態庫

(1)將要作為動態庫的檔案做成目標檔案檔案(.o)

注意和生成普通目標檔案的區別

gcc -c ***.c -o ***.o -fpic

(2)將目標檔案編譯成動態庫,字尾名是 .so

gcc -shared -o lib庫名 .so ***.o

(3)編譯的時候需要把動態庫加上

gcc src/main.c -l./lib -lmylib -o bin/a.out

(4)執行時候會找不到動態庫檔案

解決辦法

1、臨時辦法,只在當前終端有效,終端重啟以後就沒用了

在終端輸入以下命令:

export ld_library_path=庫所在目錄的絕對路徑

2、修改終端的配置檔案~/.bashrc

vim ~/.bashrc

把 export ld_library_path=庫所在目錄的絕對路徑

新增到檔案的最後一行

重啟終端或者執行命令 source ~/.bashrc 使用配置檔案生效

3、將動態庫放到系統預設目錄下 ===>/usr/lib

4、配置檔案/etc/ld.so.conf

vim /etc/ld.so.conf

將庫檔案的絕對路徑新增到庫的最後一行

使配置檔案生效:ldconfig -v

檢視可執行使用了哪些動態庫的命令:ldd 可執行檔案

動態庫和靜態庫在同乙個目錄下,預設包含的是動態庫

C 靜態庫與動態庫

感覺比較形象,就摘過來了.這次分享的 宗旨是 讓大家學會建立與使用靜態庫 動態庫,知道靜態庫與動態庫的區別,知道使用的時候如何選擇。這裡不深入介紹靜態庫 動態庫的底層格式,記憶體布局等,有興趣的同學,推薦一本書 程式設計師的自我修養 鏈結 裝載與庫 庫是寫好的現有的,成熟的,可以復用的 現實中每個程...

C 靜態庫與動態庫

庫是寫好的現有的,成熟的,可以復用的 現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始,因此庫的存在意義非同尋常。本質上來說庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。庫有兩種 靜態庫 a lib 和動態庫 so dll 所謂靜態 動態是指鏈結。回顧一下,將乙個程...

c 靜態庫與動態庫

庫分為靜態庫,動態庫,在不同系統下字尾不同。2.1.1 在鏈結和執行階段都涉及庫的呼叫 訪問 h檔案 標頭檔案 是庫的介面。h檔案提供給庫的使用者,使用者通過.h來呼叫庫中的api。2.1.2 庫中包含的是函式的實現 一堆函式的實現 這些函式在編寫的時候同樣要包含1中的標頭檔案,然後生成庫。2.1....