Linux kullanıcıları programları çalıştırırken sıklıkla paylaşılan kütüphanelerin yüklenmesi
hatasıyla karşılaşırlar ve bu hata birçok programcı ve sistemlerinde yazılım derlemek isteyen herkes için de tanıdıktır. Kelimenin tam anlamıyla, paylaşılan kütüphaneler yüklenirken bir sorun olduğu anlamına gelir.
"Paylaşılan kütüphaneler yüklenirken hata
oluştu" hatası, bir program veya komut dosyası çalıştırılırken, işletim sisteminin bu programın çalışması için gerekli olan bir veya daha fazla kütüphaneyi bulamadığı ve yükleyemediği anlamına gelir. Bu, UNIX benzeri işletim sistemlerinde yaygın bir sorundur. Bir program derlendiğinde, çalışma zamanında mevcut olması gereken çeşitli harici kütüphanelere başvurabilir. Bu kütüphaneler eksikse veya kullanılamıyorsa, paylaşılan kütüphaneler yüklenirken bir hata oluşur.
Programlarınızı derlemeseniz bile, bu hatayı görebilirsiniz: directory_name: cannot open shared object file: No such file or directory
Paket yöneticisi aracılığıyla olmayan yeni programlar veya başka bir dağıtım için tasarlanmış programlar yüklerken oldukça sık. Sistem kütüphaneyi bulamadığı için oluşur. Neden bulunamıyor ve yüklenemiyor?
Bunun birkaç nedeni vardır, genellikle hepsi bir kütüphaneye bağlıdır:
Sorunu çözerken, bu nedenlere rehberlik edeceğiz ve bunları çözmeye çalışacağız.
Şimdi, bir önceki paragrafta belirtilen nedenlere dayanarak bu sorunu çözmenin belirli örneklerini ele alalım.
Burada karmaşık bir şey yok ve her şey oldukça açık - kütüphane sistemde mevcut değil, bu yüzden bu hatayı alıyoruz. Bu yüzden bir paket yöneticisi yardımıyla kütüphane paketini bulmamız ve yüklememiz gerekiyor. Genellikle, kütüphaneleri içeren paketler, kütüphanelerin kendileriyle aynı şekilde lib
önekiyle adlandırılır.
Eğer libfuse2.so
kütüphanesi eksikse Ubuntu'da bu komutla bulabiliriz:
$ sudo apt search libfuse2
O zaman geriye kalan tek şey onu kurmaktır:
$ sudo apt install libfuse2
Bir programı kaynaktan derlemeniz gerektiğinde, başlık dosyalarını da yüklemeniz gerekecektir:
$ sudo apt install libfuse-dev
Ve herhangi bir kütüphane için de öyle. Ancak bu her zaman işe yaramıyor.
Uygulamada, kütüphanenin kurulduğu, ancak hatanın devam ettiği ve kullanıcıların sistemle normal şekilde etkileşime girmesine izin vermediği durumlar vardır. Böyle bir durumda ne yapmalı? Öncelikle, kütüphaneyi bulamayan Linux önyükleme yükleyicisini kontrol edin. Arama /etc/ld.conf.d/
yapılandırma dosyalarında belirtilen dizinlerde yapılmalıdır. Kural olarak, bunlar /usr/lib, /lib, /usr/lib64, /lib64
'tür. Eğer kütüphane farklı bir dizine yüklenmişse, sorunun kaynağının bu olduğu açıktır.
Komutunu kullanarak yükleyici için şu anda hangi kütüphanelerin mevcut olduğunu görebilirsiniz:
$ ldconfig -p
locate
komutunu kullanarak kütüphanenizin nerede olduğunu bulun. Örneğin, biz librtfreader.so
kütüphanesi ile ilgileniyoruz:
$ locate librtfreader
opt/kingsoft/wps-office/office6/
konumunu bildiğimizde, yükleyicinin kütüphaneyi algılamasını mümkün kılmamız gerekir. Yapılandırma dosyasına ya da LD_LIBRARY_PATH
değişkenine /etc/ld.so.conf.d/
yolunu ekleriz:
export LD_LIBRARY_PATH=/opt/kingsoft/wps-office/office6/
Hatayı çağıran herhangi bir kütüphane ile yükleme yapabilirsiniz. Doğru dizinde doğru kütüphaneye sembolik bir bağlantı oluşturarak daha az karmaşık bir yol da izleyebilirsiniz:
ln -s /opt/kingsoft/wps-office/office6/librtfreader.so /usr/lib/librtfreader.so
Bu genellikle yüklü olmayan bir dağıtım için programlar kullanırken olur. Her kütüphanenin .so
uzantısından sonra yazılan ek bir sürümü vardır. Örneğin, libav.so.1
. Bir kütüphane yamalandığında sürüm numarası değişir.
Genellikle bir dağıtımdaki bir program libc .so.1
gibi bir kütüphane bağımlılığı ile oluşturulur ve başka bir dağıtımda sadece libc .so.2
vardır. Çoğu durumda buradaki farklar küçüktür ve program kütüphanenin ikinci versiyonunda çalışabilir. Bu yüzden basitçe ona sembolik bir bağlantı oluşturabiliriz.
Örneğin, libusb-1.0.so.1
kütüphanesi yoktur. Ama libusb-1.0.so.0.1
var ve biz bunu kullanabiliriz:
Bunu yapmak için, kütüphaneye sembolik bir bağlantı oluşturmamız yeterlidir:
$ sudo ln -s /usr/lib/libusb-1.0.so.0.1 /usr/lib/libusb-1.0.so.1
Genellikle program ikameyi fark etmeyecek ve çalışacaktır. Akıllı bir çözüm olarak, mimariniz için kütüphanenin doğru sürümünü İnternet'te bulmaya çalışın ve /usr/lib/
veya /usr/lib64/
klasörüne yerleştirin. Ancak bundan sonra önbelleğin güncellenmesi arzu edilir:
$ sudo ldconfig
Bu adımlardan sonra sorun devam ederse, gerekli kütüphane sürümleri ve bunların nasıl kurulacağı hakkında daha ayrıntılı bilgi için programın veya işletim sisteminin belgelerine başvurmanız önerilir.