1. 程式人生 > >linux下動態庫(共享庫)

linux下動態庫(共享庫)

命名規則:

  lib + 庫名字 + .so

製作步驟:

    # 1) 生成與位置無關的程式碼(.o檔案).
        gcc -fPIC -c *.c -I /標頭檔案路徑     # 生產與位置無關的.o檔案.

    # 2) 將.o打包成共享庫(動態庫)
        gcc -shared -o lib*.so *.o -I 標頭檔案路徑名.

釋出和使用共享庫:

  釋出的檔案 : lib*.so及標頭檔案.

  使用共享庫:

    # 兩種方法.
    gcc main.c lib*.so -I 標頭檔案路徑 -o 可執行檔名.
    gcc main.c
-I 標頭檔案路徑 -L 庫所在的目錄 -l 庫的名字(去掉lib和.so) -o 可執行檔名字.

解決程式執行時動態庫無法被載入的問題:

   ldd 命令可以檢視可執行檔案在執行時所依賴的所有動態庫.

解決方法:

  1) 將lib*.so拷貝到/lib下(不建議使用,可能會與系統帶的庫重名).

  2) 環境變數LD_LIBRARY_PARH=lib*.so路徑. # 在開發過程中測試時使用(臨時).

  3) vim .bashrc新增export LD_LIBRARY_PATH=動態庫路徑. 修改完成後要重啟終端才會生效.

  4) 1.找打動態聯結器的配置檔案 /etc/ld.so.conf
   2.動態庫的路徑寫到配置檔案中.sudo vim /etc/ld.so.conf 新增動態庫的路徑.
   3.更新 – sudo ldconfig -v

優缺點:

優點:
    1. 執行程式體積小.
    2. 動態庫更新了,不需要重新編譯程式(前提:介面未變).
缺點:
    1. 釋出程式的時候,需要把動態庫提供給使用者.
    2. 動態庫沒有打包到應用程式中,載入速度相對較慢.

注: 一般將標頭檔案放在include資料夾裡,庫放在lib資料夾裡,原始檔放在src資料夾裡.