1. 程式人生 > >靜態庫、動態庫

靜態庫、動態庫

靜態庫

靜態庫 靜態庫
優點 執行速度快
缺點 佔用系統資源比較多
使用的場合 對時間要求很高的場合

靜態庫的製作:
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 xxx.c -o xxx.o -fPIC

2、將目標檔案編譯成動態庫,字尾名是 .so
gcc -shared -o

lib庫名.so xxx.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 可執行檔案
動態庫和靜態庫在同一個目錄下,預設包含的是動態庫