Ben yerleştirilen bağlı bir kütüphane (libz.so.1.2.7) gerektiren "alfa" adlı bir ikili yürütülebilir dosya var /home/username/myproduct/lib/libz.so.1.2.7
Aşağıdaki komutu yürüterek ikili çalıştırılabilir dosyamı yumurtlamadan önce terminal örneğime de aktarıyorum.
export LD_LIBRARY_PATH=/home/username/myproduct/lib/:$LD_LIBRARY_PATH
Şimdi, aynı kütüphane gerektiren ancak farklı bir sürümü, yani (libz.so.1.2.8) kullanılabilir başka bir uygulama "bravo" doğurduğunda
/lib/x86_64-linux-gnu/libz.so.1.2.8
, sistem aşağıdaki hatayı atar.
version `ZLIB_1.2.3.3' not found (required by /usr/lib/x86_64-linux-gnu/libxml2.so.2)
Ayarlamayı LD_LIBRARY_PATH
kaldırırsam, "bravo" iyi çalışır. Yukarıdaki davranış, bağlantılı kütüphaneleri ararken LD_LIBRARY_PATH
tanımlanmış dizin yolları üzerinde öncelikli olduğundan /etc/ld.so.conf
ve sonuç olarak yukarıdaki hata oluştuğunu anlıyorum . Sadece UNIX / LINUX geliştiricilerinin işletim sistemini neden farklı dizinlerdeki hiyerarşiye göre diğer dizinlerdeki bağlantılı kütüphaneleri aramak için tasarlamadığını merak ediyorum.
Basitçe söylemek gerekirse, UNIX / LINUX sistemleri gerekli kütüphaneyi bulana kadar bir dizi dizinde dolaşır. Ancak, sürümüne bakılmaksızın ilk kütüphane örneğini kabul etmek yerine beklenen sürümü bulana kadar neden aynı şeyi yapmıyor?
libz.so.1
bir symlink olduğunulibz.so.1.2.8