首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Linux C編程:動態鏈接庫(.so)製作與使用全流程

     編輯:關於C語言

動態庫製作三步曲

/* 1. 編譯位置無關代碼 */
gcc -c -fPIC foo.c bar.c

/* 2. 生成共享庫 */
gcc -shared -o libfoobar.so foo.o bar.o

/* 3. 使用庫編譯主程式 */
gcc main.c -o main -L. -lfoobar

執行時庫搜尋路徑解決方案

方法命令/設置優先級
環境變量export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH高
編譯時嵌入 rpathgcc main.c -o main -Wl,-rpath=./lib -L./lib -lfoobar中
系統配置echo "/path/to/lib" > /etc/ld.so.conf.d/my.conf && ldconfig低(需 root)

驗證動態依賴

$ ldd main
    linux-vdso.so.1 =>  (0x00007ffc12345000)
    libfoobar.so => ./lib/libfoobar.so (0x00007f8a12345000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8a12345000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f8a12345000)

若顯示 not found,檢查上述路徑設置。

手動指定庫路徑編譯(不修改環境)

gcc -o main main.c -lfoobar -B /path/to/lib
# -B 指定 gcc 搜尋路徑前綴,僅影響鏈接階段
# 執行時仍需 LD_LIBRARY_PATH 或 rpath

靜態庫 vs 動態庫快速對比

  • 靜態庫(.a):編譯時複製代碼,體積大、無依賴、啟動快。
  • 動態庫(.so):運行時加載,體積小、可升級、佔用記憶體少(共享),但有依賴地獄風險。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved