Aslında, düzgün bir şekilde yapılırsa, paylaşılan kitaplığın birden çok sürümünü yükleyebilirsiniz.
Paylaşılan kitaplıklar genellikle şu şekilde adlandırılır:
lib<name>.so.<api-version>.<minor>
Ardından, aşağıdaki adlar altında kütüphaneye sembolik bağlar vardır:
lib<name>.so
lib<name>.so.<api-version>
Bir geliştirici bir ikili dosya oluşturmak için kütüphaneye bağlandığında .so
, bağlayıcının bulduğu dosya adıdır. Gerçekten herhangi bir zamanda <name>
aynı anda yüklenmiş olanlardan sadece biri olabilir, ancak bu sadece bir geliştiricinin aynı anda bir kütüphanenin birden fazla farklı sürümünü hedefleyemeyeceği anlamına gelir. Paket yöneticileriyle bu .so
symlink, -dev
yalnızca geliştiricilerin yüklemesi gereken ayrı bir paketin parçasıdır .
Bağlayıcı, adı biten bir dosya bulduğunda .so
ve onu kullandığında, bu kitaplığın içinde soname adlı bir alan arar . Soname, bağlayıcıya, sonuçta elde edilen ikili dosyaya hangi dosya adının gömüleceğini ve böylece çalışma zamanında hangi dosya adının aranacağını bildirir. Soname'nin ayarlanması gerekiyor lib<name>.so.<api-version>
.
Bu nedenle, çalışma zamanında dinamik bağlayıcı bunu arayacak lib<name>.so.<api-version>
ve kullanacaktır.
Amaç şudur:
<minor>
yükseltmeler kütüphanenin API'sini değiştirmez ve <minor>
daha yüksek bir sürüme getirildiğinde, tüm ikili dosyaların yeni sürüme yükseltilmesine izin verilir. İkili dosyalar, lib<name>.so.<api-version>
en son yüklenen bir simge bağlantısı olan ad altında kitaplığı lib<name>.so.<api-version>.<minor>
aradıklarından, yükseltme işlemini alırlar.
<api-version>
yükseltmeler kitaplığın API'sını değiştirir ve mevcut ikili uygulamaların yeni sürümü kullanmasına izin vermek güvenli değildir. <api-version>
Değiştirilmesi durumunda , bu uygulamalar adı aradığından, lib<name>.so.<api-version>
ancak farklı bir değere sahip <api-version>
olduklarından, yeni sürümü almayacaklardır.
Paket yöneticileri genellikle aynı kitaplığın birden fazla sürümünü aynı dağıtım sürümünde paketlemez, çünkü kitaplığı kullanan tüm ikili dosyalar da dahil olmak üzere tüm dağıtım, dağıtımdan önce her kitaplığın tutarlı bir sürümünü kullanmak üzere derlenir yayınlandı. Her şeyin tutarlı olduğundan ve bir dağıtımdaki her şeyin diğer her şeyle uyumlu olduğundan emin olmak, distribütörler için iş yükünün büyük bir parçasıdır.
Ancak, sisteminizi rahatsızlığınızın bir sürümünden diğerine yükselttiyseniz ve daha eski kitaplık sürümleri gerektiren bazı eski paketleriniz varsa, kitaplığın birden çok sürümüyle kolayca sonuçlandırabilirsiniz. Misal:
- eski bir Debian libmysqlclient16 içerir
libmysqlclient.so.16.0.0
ve içerir libmysqlclient.so.16
.
- Geçerli Debian'dan libmysqlclient18 , içerir
libmysqlclient.so.18.0.0
ve sembolik bağlar libmysqlclient.so.18
.