/* 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 | 高 |
| 編譯時嵌入 rpath | gcc 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