.So, .la ve .a kütüphane dosyaları arasındaki fark nedir?


230

Bir .sodosya dinamik bir tür kütüphane biliyorum (iş parçacığı bellekte birden fazla kopyasına gerek yok bu yüzden bu tür kütüphaneleri paylaşabilirsiniz). Peki .ave ile arasındaki fark .lanedir? Bunların hepsi statik kütüphaneler mi?

Dinamik kütüphanelerin statik olanlara göre büyük avantajları varsa, neden hala çok sayıda statik kütüphane var?

Ayrıca kütüphaneleri (her iki tür) yüklemek için altında yatan mekanizmayı ve bir yerde bir lib kullanıldığında kod parçasının nasıl çağrıldığını bilmek istiyorum. Çekirdeğin hangi kısmını incelemeliyim? Ve bir sürecin nasıl çalıştığını bilmek için hangi ilgili Linux komutunu / yardımcı programını bilmeliyim? ( ldKomutu şimdiye kadar biliyorum )

Ne zaman .soveya içine kod oluşturmaya çalışmalıyım .a? Hangisi daha iyi?

[mirror@home ins_openvpn]$ ls lib/openvpn/plugins/ -l
total 96
-rw-r--r-- 1 mirror mirror 22892 Sep  2 23:25 openvpn-plugin-auth-pam.a
-rwxr-xr-x 1 mirror mirror   931 Sep  2 23:25 openvpn-plugin-auth-pam.la
-rwxr-xr-x 1 mirror mirror 23621 Sep  2 23:25 openvpn-plugin-auth-pam.so
-rw-r--r-- 1 mirror mirror 17228 Sep  2 23:25 openvpn-plugin-down-root.a
-rwxr-xr-x 1 mirror mirror   932 Sep  2 23:25 openvpn-plugin-down-root.la
-rwxr-xr-x 1 mirror mirror 18805 Sep  2 23:25 openvpn-plugin-down-root.so

Yanıtlar:


306

.sodosyalar dinamik kütüphanelerdir . Sonek, "paylaşılan nesne" anlamına gelir, çünkü kitaplıkla bağlantılı tüm uygulamalar, sonuçtaki yürütülebilir dosyada bir kopya yapmak yerine aynı dosyayı kullanır.

.adosyalar statik kütüphanelerdir . Sonek "arşiv" anlamına gelir, çünkü bunlar aslında orijinal .o nesne dosyalarının sadece bir arşividir ( arkomutla yapılır - tarşimdi sadece kitaplık yapmak için kullanılan bir selefi ).

.ladosyalar , ilgili kütüphaneyi oluşturan dosyaları tanımlamak için GNU "libtools" paketi tarafından kullanılan metin dosyalarıdır . Onlar hakkında daha fazla bilgiyi bu soruda bulabilirsiniz: libtool'un .la dosyası ne için?

Statik ve dinamik kütüphanelerin her birinin artıları ve eksileri vardır.

Static pro: Kullanıcı her zaman uygulamanızla test ettiğiniz kitaplığın sürümünü kullanır, bu nedenle şaşırtıcı uyumluluk sorunları olmamalıdır.

Statik con: Bir kitaplıktaki bir sorun giderilmişse, bundan yararlanmak için uygulamanızı yeniden dağıtmanız gerekir. Ancak, kullanıcıların kendi başlarına güncelleme yapabilecekleri bir kitaplık olmadığı sürece, bunu yine de yapmanız gerekebilir.

Dynamic pro: Kütüphane için kullanılan bellek, kütüphaneyi kullanan tüm işlemler arasında itfa edildiğinden, işleminizin bellek alanı daha küçüktür.

Dynamic pro: Kütüphaneler talep üzerine çalışma zamanında yüklenebilir; bu eklentiler için iyidir, bu nedenle yazılımı derlerken ve yüklerken kullanılacak eklentileri seçmeniz gerekmez. Yeni eklentiler anında eklenebilir.

Dinamik con: Kitaplık, birisinin uygulamayı yüklemeye çalıştığı sistemde olmayabilir veya uygulamayla uyumlu olmayan bir sürümüne sahip olabilir. Bunu hafifletmek için, uygulama paketinin kütüphanenin bir kopyasını içermesi gerekebilir, böylece gerektiğinde kurabilir. Bu, genellikle gerekli bağımlılıkları indirip yükleyebilen paket yöneticileri tarafından da azaltılır.

Dinamik kütüphaneler, özellikle sistem kütüphaneleri için faydalıdır libc. Çekirdek arabirimleri değiştiğinden, bu kitaplıkların genellikle belirli işletim sistemine ve sürüme bağlı olan kod içermesi gerekir. Bir programı statik sistem kitaplığına bağlarsanız, yalnızca bu kitaplık sürümünün yazıldığı işletim sistemi sürümünde çalışır. Ancak dinamik bir kitaplık kullanırsanız, çalıştırdığınız sistemde yüklü olan kitaplığı otomatik olarak alır.


1
@Barmar, Yani statik kütüphanelerin avantajlarının dinamik kütüphanelerin avantajlarından daha ağır bastığını mı söylüyorsunuz?
Pacerier

4
@Pacerier Bunu nereden aldığını bilmiyorum.
Barmar

13
Bu anlamsız bir soru. Artı ve eksilerin ağırlığı koşullara bağlıdır, evrensel bir cevap yoktur. Bir gündeminiz var gibi görünüyor ve beni yemeye çalışıyorsunuz.
Barmar

3
@Barmar, Nop masumum. Sadece meraklı biri.
Pacerier

11
Başka bir faktör lisanslamadır - LGPL, ticari bir bağlamda, yani kaynağınızı dağıtmak istemediğiniz yerde dinamik bağlantı gerektirir.
Sam
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.