Çalışma zamanında paylaşılan bir kütüphaneye bağlanan bir işlemi çalıştırdığımda (işlem başladığında bağlantılı, daha sonra bağlanmayacak şekilde dlload()
), .so
başka bir paylaşılan kütüphane ( ) dosyasını nerede arar LD_LIBRARY_PATH
?
Arka fon:
Belirli bir üçüncü taraf kütüphanesini kullanan, yazdığım bazı C ++ kodlarım var. Kütüphaneyi kurdum ve kodumu hem Ubuntu hem de farklı sürümler ve farklı gcc sürümleri olmak üzere iki farklı platformda derledim. Kütüphane derlenmiş ve kaynaktan kurulmuş ve /usr/local/lib
her iki platformda da bulunmaktadır. Kodumu derlerken pkg-config --libs
, üçüncü taraf kütüphanesinin parametrelerine bağlanır ve pkg-config --libs
aynı şeyi her iki platformda da aynı şekilde döndürdüğümü doğrularım.
Kodum her iki platformda da başarıyla derleniyor ve her iki platformda LD_LIBRARY_PATH
tanımlanmadı (veya boş olarak tanımlandı ""
:). Ancak, bir platoform üzerinde çalıştırdığımda iyi çalışıyor ve diğerinde bu hatayı alıyorum:
error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
Tuhaftır, olanları değil işi olduğunu daha yeni Ubuntu ve gcc sürümü. : /
Bu yüzden çalışan kişinin kütüphaneyi nasıl bulabildiğini bulmaya çalışıyorum, böylece bozuk olanı kütüphaneyi aynı şekilde bulmasını sağlayabiliyorum. (yani, ayar olmadan LD_LIBRARY_PATH
)
Güncelleştirme:
İşte benim çıktım cat /etc/ld.so.conf.d/*
... çalışan (eski) sistemde:
/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
... kırık (daha yeni) sistemde:
# 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
ama yine de hata veriyor error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
... Dizini almamasının bir nedeni var mı /etc/ld.so.conf.d/*.conf
?
sudo ldconfig -v
Aşağıda önerildiği şekilde çalıştırmayı deneyin . Hala işe yaramazsa sorunuzu çıktıyla güncelleyin ldd /path/to/your/application
.
/etc/ld.so.conf.d/*.conf
, ama bundan emin değilim.