嵌入式C開發入門——靜態庫&動態庫
阿新 • • 發佈:2018-12-04
靜態庫
靜態庫,所有的庫包含在最終可執行檔案中,佔用空間大,執行速度快.
靜態庫一般以lib開頭命名,以.a字尾結尾
靜態庫的製作
1. 把所有需要的.c原始檔生成對應的.o檔案(不包括main函式)
2. 使用工具將所有.o檔案打包生成靜態庫
ar rcs lib庫名.a mul.o add.o sub.o
3. 編譯的時候新增靜態庫
gcc 1.c -o 1.o libmylib.a //庫檔案在當前目錄下
編譯時gcc庫包含相關指令
引數 | 功能 |
---|---|
-L | 庫檔案所在目錄 |
-l(L的小寫) | 庫檔名 |
-I(i的大寫) | 標頭檔案所在目錄 |
//連結home目錄下的libmylib.a靜態庫, 包含當前目錄下的標頭檔案
gcc 1.c -o run -L /home -lmylib -I ./
動態庫
動態庫只有在執行的時候才呼叫,佔用空間小,常見庫一般都是靜態庫,如libc
動態庫一般以lib開頭命名,以.so字尾結尾
動態庫製作
1. 把所有需要的.c原始檔生成對應的.o檔案(不包括main函式)
gcc xxx.c -c -o xxx.o -fPIC
2. 使用工具將所有.o檔案打包生成動態庫
gcc -shared -o lib庫名.so xxx.o
3. 解決動態庫路徑問題
-
方法一: 在終端輸入(臨時新增)
export LD_ LIBRARY_PATH = 絕對路徑` -
方法二: 修改終端配置檔案~/.bashrc
1. vim ~/.bashrc
2. export LD_LIBRARY_PATH=庫所在目錄的絕對路徑新增檔案最後一行
3. 重啟終端或者執行命令 source ~/.bashrc 使用配置檔案生效
-
方法三: 將動態庫放到系統預設目錄下 ===> /usr/lib
-
方法四: 配置檔案 /etc/ld.so.conf
1. vim /etc/ld.so.conf
2. 將庫檔案的絕對路徑新增到庫的最後一行
3. 使配置檔案生效:ldconfig -v
ps: ldd a.out可以檢視執行檔案所依賴的動態庫
動態庫和靜態庫在同一個目錄下,預設包含的是動態庫
4.編譯時新增動態庫
gcc ./src/main.c -L ./lib -lmylib -I ./include/ -o ./bin/a.out