Ketika saya menjalankan proses yang menautkan ke pustaka bersama saat runtime (ditautkan saat proses dimulai, tidak ditautkan nanti dengan dlload()
), di mana ia mencari .so
file pustaka bersama ( ) selain itu LD_LIBRARY_PATH
?
Latar Belakang:
Saya memiliki beberapa kode C ++ yang saya tulis yang menggunakan pustaka pihak ketiga tertentu. Saya telah menginstal perpustakaan dan mengkompilasi kode saya pada dua platform yang berbeda, baik Ubuntu tetapi versi yang berbeda, dan versi gcc yang berbeda juga. Perpustakaan dikompilasi dan diinstal dari sumber, dan terletak di /usr/local/lib
kedua platform. Ketika saya mengkompilasi kode saya, saya menautkan dengan pkg-config --libs
parameter untuk perpustakaan pihak ketiga dan saya telah memverifikasi yang pkg-config --libs
mengembalikan hal yang sama persis di kedua platform.
Kode saya berhasil dikompilasi di kedua platform, dan LD_LIBRARY_PATH
tidak didefinisikan (atau didefinisikan sebagai kosong:) ""
di kedua platform. Namun, ketika saya menjalankannya di satu platoform berfungsi dengan baik, dan di sisi lain saya mendapatkan kesalahan ini:
error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
Lucunya, orang-orang yang tidak bekerja adalah lebih baru versi Ubuntu dan gcc. : /
Jadi saya mencoba mencari tahu bagaimana orang yang bekerja dapat menemukan perpustakaan, sehingga saya dapat membuat yang rusak menemukan perpustakaan dengan cara yang sama. (yaitu, tanpa pengaturan LD_LIBRARY_PATH
)
Memperbarui:
Ini hasil saya dari cat /etc/ld.so.conf.d/*
... pada sistem (lama) yang berfungsi:
/usr/lib/mesa
/usr/lib32/mesa
/usr/lib/alsa-lib
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
... pada sistem yang rusak (lebih baru):
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/mesa
/usr/local/lib/libthrift-0.9.0.so
tetapi tetap saja memberikan kesalahan error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
... Apakah ada alasan tidak mengambil direktori dari /etc/ld.so.conf.d/*.conf
?
sudo ldconfig -v
seperti yang disarankan di bawah ini. Jika masih tidak berfungsi, perbarui pertanyaan Anda dengan output dari ldd /path/to/your/application
.
/etc/ld.so.conf.d/*.conf
, tetapi saya tidak yakin akan hal itu.