Tambahkan jalur ke tempat perpustakaan baru Anda berada LD_LIBRARY_PATH
(memiliki nama yang sedikit berbeda di Mac ...)
Solusi Anda harus bekerja dengan menggunakan -L/my/dir -lfoo
opsi, pada waktu proses gunakan LD_LIBRARY_PATH untuk menunjuk ke lokasi perpustakaan Anda.
Hati-hati dengan menggunakan LD_LIBRARY_PATH - singkatnya (dari tautan):
..implikasi ..:
Keamanan : Ingat bahwa direktori yang ditentukan dalam LD_LIBRARY_PATH dicari sebelum (!) lokasi standar? Dengan cara itu, orang jahat dapat membuat aplikasi Anda memuat versi pustaka bersama yang berisi kode berbahaya! Itulah salah satu alasan mengapa executable setuid / setgid mengabaikan variabel itu!
Performa: Pemuat tautan harus mencari semua direktori yang ditentukan, sampai menemukan direktori tempat perpustakaan bersama berada - untuk SEMUA perpustakaan bersama yang ditautkan dengan aplikasi! Ini berarti banyak panggilan sistem ke open (), yang akan gagal dengan “ENOENT (Tidak ada file atau direktori seperti itu)”! Jika jalur berisi banyak direktori, jumlah panggilan yang gagal akan meningkat secara linier, dan Anda dapat mengetahuinya dari waktu start-up aplikasi. Jika beberapa (atau semua) direktori berada dalam lingkungan NFS, waktu start-up aplikasi Anda bisa sangat lama - dan dapat memperlambat seluruh sistem!
Inkonsistensi: Ini adalah masalah yang paling umum. LD_LIBRARY_PATH memaksa aplikasi untuk memuat pustaka bersama yang tidak ditautkan, dan kemungkinan besar tidak kompatibel dengan versi aslinya. Ini bisa sangat jelas, yaitu aplikasi macet, atau dapat menyebabkan hasil yang salah, jika perpustakaan yang diambil tidak cukup berfungsi seperti yang dilakukan versi aslinya. Terutama yang terakhir terkadang sulit untuk di-debug.
ATAU
Gunakan opsi rpath melalui gcc ke linker - jalur pencarian pustaka runtime, akan digunakan alih-alih mencari di dir standar (opsi gcc):
-Wl,-rpath,$(DEFAULT_LIB_INSTALL_PATH)
Ini bagus untuk solusi sementara. Linker terlebih dahulu mencari pustaka LD_LIBRARY_PATH sebelum melihat ke direktori standar.
Jika Anda tidak ingin memperbarui LD_LIBRARY_PATH secara permanen, Anda dapat melakukannya dengan cepat di baris perintah:
LD_LIBRARY_PATH=/some/custom/dir ./fooo
Anda dapat memeriksa apa yang diketahui linker perpustakaan tentang penggunaan (contoh):
/sbin/ldconfig -p | grep libpthread
libpthread.so.0 (libc6, OS ABI: Linux 2.6.4) => /lib/libpthread.so.0
Dan Anda dapat memeriksa perpustakaan mana yang digunakan aplikasi Anda:
ldd foo
linux-gate.so.1 => (0xffffe000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7f9e000)
libxml2.so.2 => /usr/lib/libxml2.so.2 (0xb7e6e000)
librt.so.1 => /lib/librt.so.1 (0xb7e65000)
libm.so.6 => /lib/libm.so.6 (0xb7d5b000)
libc.so.6 => /lib/libc.so.6 (0xb7c2e000)
/lib/ld-linux.so.2 (0xb7fc7000)
libdl.so.2 => /lib/libdl.so.2 (0xb7c2a000)
libz.so.1 => /lib/libz.so.1 (0xb7c18000)
libfoo.*
file ada dan di mana -.so
w / o.0
,.a
, dll?