1. 程式人生 > >嵌入式C開發入門——靜態庫&動態庫

嵌入式C開發入門——靜態庫&動態庫

靜態庫

靜態庫,所有的庫包含在最終可執行檔案中,佔用空間大,執行速度快.
靜態庫一般以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