.A ve .so dosyası arasındaki fark nedir?


Yanıtlar:


54

Bir .adosya statik bir kütüphane iken, bir .sodosya Windows'taki DLL dosyasına benzer bir paylaşılan nesne (dinamik) kütüphanedir. Bu sayfadaki ikisi arasındaki farklar hakkında bazı detaylı bilgiler var .


18
.aderleme sırasında sadece bir programın parçası olarak dahil edilebilir. .sobir program yüklenirken '"içe aktarılabilir".
LawrenceC

2
.a ne anlama geliyor?
hfrmobile

2
@ hfrmobile Arşiv anlamına gelir - statik bir kütüphane, aryardımcı program kullanılarak oluşturulan nesne dosyaları topluluğudur . Burada daha fazla bilgi
ajk

28

Bir takip olarak, bir .a dosyası bir "ar" arşividir. Bir tar arşivinden farklı olarak, .o veya nesne dosyalarını depolar, arşivden çıkarılmalarına ve diğer şeylerin yanı sıra bir programa bağlanmalarına izin verir. İsterseniz diğer dosyaları depolamak için ar kullanabilirsiniz.

Örneğin, bir ar dosyasının üyelerinin -t parametresi ile bir listesini alabilirsiniz:

ar -t /usr/lib/libc.a

Bir .so dosyası bir "paylaşılan nesne" dosyasıdır ve linker için daha fazla bilgiye sahiptir, böylece üyeler mümkün olan en kısa sürede bir yükleme programına bağlanabilir.

Örneğin, şunu deneyin:

objdump -T /lib/libc-2.11.1.so

(veya libc.so'nuzun hangi sürümü / lib dizininizde varsa.). .so dosyasının ayrıca dosyayı başka bir yerde bulmaya yönlendiren bir bağlayıcı komut dosyası içerebileceğini veya başka bir şey kullanabileceğini unutmayın.

İlginçtir ki, bir .so dosyası da tam teşekküllü bir program olabilir. Örneğin, /lib/libc.so.6 çalıştırmayı denemek . (Ne yazık ki, bu son bölüm daha modern sistemler üzerinde çalışıyor gibi görünmüyor. Bu büyük bir kayıp değil.)


Tipo. yazmayı kastediyorsun ar -t /usr/lib/libc.a. Aslında -bu durumda gerekli görünmüyor. Ayrıca /lib/libc.so.6.sadece bazı çıktılar yazdırır. Bunu arayabilir miyim bilmiyorum full fledged program.
Faheem Mitha

1
Bu icra bulmak için ana bir sembol olduğu anlamında tam teşekküllü bir programdır.
Hack,

2
Ayrıca ldd.so'lar üzerinde de çalıştırabilirsiniz ve hangi kütüphaneleri kullandığını size gösterir. Statik dinamik bir kütüphane olmadığını söyleyen bir mesajla geri dönecektir.
Marcin
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.