靜態庫、動態庫
阿新 • • 發佈:2018-12-10
靜態庫
靜態庫 | 靜態庫 |
優點 | 執行速度快 |
缺點 | 佔用系統資源比較多 |
使用的場合 | 對時間要求很高的場合 |
靜態庫的製作:
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 可執行檔案
動態庫和靜態庫在同一個目錄下,預設包含的是動態庫