2015-05-12 40 views

cevap

2

. .a, statik kitaplık dosyalarıdır.

Sen statik .a kütüphanelere bağlantı ve dinamik bağlantı ve yük dosyaları .bu zamanında derler ve bu şekilde bağlantı sağlanır olabilir.

.o onlar * .c dosyaları derlenen olsun ve yürütülebilir, .a veya .bu kütüphaneleri oluşturmak bağlantılı olabilir (nesne dosyalarıdır. O here

+0

Ayrıca çalışma zamanında kütüphanelerin yüklenmesi için bir yol yok mu? – Pacerier

27

.a bir "arşiv" dir hakkında daha fazlasını okuyun. Her ne kadar bir arşiv dosyası her türlü içerebilir, GNU toolchain bağlamında, bu (özellikle pencerelerde diğer toolchain aynı amaçla .lib kullanırlar, fakat bu biçimi genellikle genel amaçlı arşiv değil nesne dosyalarının bir kütüphane, ve) toolchain için genellikle belirli. o kütüphaneyi kullandığında bağlayıcı ne temelde bir arşivden tek tek nesne dosyaları ayıklamak için mümkündür.

.o bir nesne dosyasıdır. Bu, makine koduna derlenen ancak (genellikle) tam olarak bağlantılı olmayan koddur. Ayrı bir derleme tarafından oluşturulan diğer nesne dosyalarında (bir kitaplıkta veya tek tek) tanımlanan sembollere çözümlenmemiş başvurular olabilir. Nesne dosyaları, diğer modüller ile bağlantıyı desteklemek için meta veri içerir ve isteğe bağlı olarak ayrıca kaynak düzeyindeki sembolik hata ayıklama için (örneğin GDB'de). Genellikle Windows'da bulunan diğer araç kutuları, .o yerine .obj uzantısını kullanır.

.so bir paylaşılan nesne arşiv (veya sadece paylaşılan kütüphane). Bu, bir program başlatıldığında yürütülebilir bir yapıya dinamik olarak bağlanır. Daha küçük yürütülebilir dosyalara ve birden çok çalıştırılabilir tarafından kullanılacak tek bir nesne kitaplığı örneğine izin verir. İşletim sistemi API'ları tipik olarak paylaşılan kütüphanelerdir ve LGPL'de, kapalı kaynak özel koddan LGPL kodunu ayırmak için lisanslama amacıyla sıklıkla kullanılırlar (örneğin avukat değilim). Bu yaklaşımın meşruiyetiyle ilgili hiçbir iddiada bulunmuyorum. herhangi bir özel durum). .o veya .a dosyalarından farklı olarak, bir uygulama tarafından kullanılan .so dosyalarının çalışma zamanı sisteminde bulunması gerekir. Diğer sistemler (genelde Windows) aynı amaçla .dll (dinamik bağlantı kitaplığı) kullanır. aslında kütüphane yerine izin -

O .o dosyaları sembol çözünürlük .o dosyası tarafından yerine getirildiği takdirde, herhangi bir kütüphane uygulaması bağlantılı olmayacak .a dosyaları, içinde önce nesne kodu bağlantılı olduğunu anlamak için belki yararlıdır Kendi uygulamanızla ve ayrıca kullanıcı tanımlı kodu çağırmak için kütüphane uygulamaları için - örneğin bir GUI çerçevesi bir uygulama giriş noktasını çağırabilir.

+0

"* .o dosyaları .a * içindeki nesne kodundan önce bağlanır" ile ilgili olarak, belirttiğiniz siparişten bağımsız olarak gerçekleşir mi? – Pacerier

1

Statik kütüphaneler kod yürütülebilir derlenmiş bir uygulamaya bağlı olduğunda, kütüphane için nesne kodu içeren arşivler.

Paylaşılan kitaplıklar, yürütülebilir dosyalara derlenmemeleri bakımından farklıdır. Bunun yerine, dinamik bağlayıcı, ihtiyaç duyduğu kitaplık (kütüphaneleri) arayan bazı dizinleri arar, sonra bunu belleğe yükler. Daha sonra bir yürütülebilir dosya aynı paylaşımlı kütüphaneyi aynı anda kullanabilir, böylece hafıza kullanımını ve çalıştırılabilir boyutunu azaltabilir. Ancak, yürütülebilir dosya ile dağıtılacak daha fazla dosya vardır. Kütüphanenin, linker'ın bulabileceği bir yerde kullanıcının sistemine yüklendiğinden emin olmalısınız, statik bağlantı bu sorunu ortadan kaldırır, ancak daha büyük bir yürütülebilir dosyayla sonuçlanır.

+0

'Ancak, yürütülebilir dosya ile dağıtılacak daha fazla dosya var.” İdeal olarak, tam tersi doğrudur. İkili paketler örn. Linux, açık bir şekilde etrafta dolaşmıyor ve ortak kitaplıkların çoğunu tekrar tekrar yüklememeye çalışıyor. Bir bağımlılığı işaretler ve kullanıcıyı kurmaya mecbur bırakırlar. Bir paket yöneticisinin dağıtımını yapsa bile, çoğu zaman kullanıcının sistemindeki gerekli lib'lerin veya kullanıcının bunları alabileceği varsayılabilir. Çoğunlukla Windows, tüm DLL'leri yeniden dağıttığımız ve yeniden dağıttığımız şeyleri bu kadar zorlaştırır. Hangi, uh ... dinamik bağlantı noktasını yener –

İlgili konular