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 ( .sofile) linker mencoba:
- direktori yang tercantum dalam
LD_LIBRARY_PATHvariabel lingkungan ( DYLD_LIBRARY_PATHpada OSX);
- direktori yang tercantum dalam executable rPath ;
- direktori pada jalur pencarian sistem, yang (setidaknya di Linux) terdiri dari entri di
/etc/ld.so.confplus /libdan /usr/lib.
Rpath disimpan dalam executable (itu adalah atribut DT_RPATHatau DT_RUNPATHdinamis). Ini dapat berisi path absolut atau path yang dimulai dengan $ORIGINuntuk menunjukkan path relatif ke lokasi executable (misalnya jika executable berada di dalam /opt/myapp/bindan rpath-nya adalah $ORIGIN/../lib:$ORIGIN/../pluginsmaka dynamic linker akan mencari /opt/myapp/libdan /opt/myapp/plugins). Jalan biasanya ditentukan ketika dieksekusi dikompilasi, dengan -rpathopsi 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, …/libstruktur, lalu tautkan dengan -rpath='$ORIGIN/../lib'. Jika Anda menginstal biner pra-dibangun di sistem Anda, letakkan perpustakaan di direktori di jalur pencarian ( /usr/local/libjika Anda adalah administrator sistem, atau direktori yang Anda tambahkan $LD_LIBRARY_PATH), atau coba chrpath.
/lib64dan/usr/lib64digunakan untuk binari 64 bit dan/libdan/usr/libdigunakan untuk binari 32 bit.