The HOWTO shared library menjelaskan sebagian besar mekanisme yang terlibat, dan loader dinamis pengguna tersebut lebih rinci. Setiap varian unix memiliki caranya sendiri, tetapi sebagian besar menggunakan format yang dapat dieksekusi ( ELF ) yang sama dan memiliki penghubung dinamis yang serupa (diturunkan dari Solaris). Di bawah ini saya akan merangkum perilaku umum dengan fokus pada Linux; periksa manual sistem Anda untuk cerita lengkap.
Singkatnya, ketika sedang mencari perpustakaan dinamis ( .so
file) linker mencoba:
- direktori yang tercantum dalam
LD_LIBRARY_PATH
variabel lingkungan ( DYLD_LIBRARY_PATH
pada OSX);
- direktori yang tercantum dalam executable rPath ;
- direktori pada jalur pencarian sistem, yang (setidaknya di Linux) terdiri dari entri di
/etc/ld.so.conf
plus /lib
dan /usr/lib
.
Rpath disimpan dalam executable (itu adalah atribut DT_RPATH
atau DT_RUNPATH
dinamis). Ini dapat berisi path absolut atau path yang dimulai dengan $ORIGIN
untuk menunjukkan path relatif ke lokasi executable (misalnya jika executable berada di dalam /opt/myapp/bin
dan rpath-nya adalah $ORIGIN/../lib:$ORIGIN/../plugins
maka dynamic linker akan mencari /opt/myapp/lib
dan /opt/myapp/plugins
). Jalan biasanya ditentukan ketika dieksekusi dikompilasi, dengan -rpath
opsi untuk ld
, tetapi Anda dapat mengubahnya dengan chrpath
.
Dalam skenario yang Anda jelaskan, jika Anda adalah pengembang atau pembuat paket aplikasi dan bermaksud untuk menginstalnya dalam …/bin
, …/lib
struktur, lalu tautkan dengan -rpath='$ORIGIN/../lib'
. Jika Anda menginstal biner pra-dibangun di sistem Anda, letakkan perpustakaan di direktori di jalur pencarian ( /usr/local/lib
jika Anda adalah administrator sistem, atau direktori yang Anda tambahkan $LD_LIBRARY_PATH
), atau coba chrpath
.
/lib64
dan/usr/lib64
digunakan untuk binari 64 bit dan/lib
dan/usr/lib
digunakan untuk binari 32 bit.