Paylaşılan kütüphaneleri linux üzerinde çalışmak nasıl bir çaylak değilim. Uygulamaların linux üzerinde çalışma zamanında aynı paylaşılan kitaplığın farklı revizyonlarını nasıl çözdüğünü anlamaya çalışıyorum.nasıl uygulamalar çalışma zamanında paylaşılan kütüphanelerin farklı sürümlerine giderebilirim?
Bildiğim kadarıyla anlamaya gibi paylaşılan kitaplık (gerçek obj dosyası yani gerçek adı) üç örneğin "isimler",
- libmy.so.1.2
- libmy.so sahiptir.
- libmy.so 1 (gerçek obj dosyasında gömülü olduğu SONAME,) (bağlayıcı ad, bağlantı sırasında bağlayıcı sağlanan ve yürütülebilir gömülü)
Eğer ldconfig aracılığıyla kütüphane kurmak, onu aşağıdaki symbo oluşturur lic bağlayan
- (2) => (1)
- (3) => (2)
Şimdi şu gerçek adıyla aynı kütüphanede başka bir versiyonunu derlemek Diyelim , libmy.so.2.0. kurallar tarafından SONAME ben "-l" bayrağıyla sağlayacak bağlayıcı adıdır hangi uygulamayı bağlantı zamanda
libmy.so.2.0 olurdu. Ben (http://www.dwheeler.com/program-library/Program-Library-HOWTO/x36.htm l) okumak yönergelerin uygulanması, bu libmy.so ve eğer öyleyse, nasıl obj dosyası iki sürüm ayırt edilecektir olmak zorunda değil ki?
Sen benim cevap yazma ortasında beni yakaladı. Şimdi sadece OP meraklı ise, o böyle readelf' 'ile yaptığı sistemde önceden yüklenmiş kütüphanelerin sonames kontrol olabileceğini ekleyebilirsiniz:' readelf -Wa /usr/lib/libstdc++.so.6 | grep SONAME' ve kılavuzların nasıl uygulamaya koyulduğunu görün. –
Evet, bu benim bölümümde bir düzenleme hatasıydı, ben gerçekten "libmy.so.2" yi kastettim. Yani üç mermiyi doğru şekilde takip edersem, eski bir büyük versiyona karşı bağlantı kurarken, buna karşılık gelen SONAME değerini belirleyebilirim. Bu yardımcı belgelerin çoğunun bunun hakkında yanıltıcı olduğunu söylemeliyim. Bu gerçeği açıkça belirtmeksizin, her zaman en son büyük revizyona karşı bağlantı kurmanın sadece bir kısmını tartışırlar. – nisah