Yanıtlar:
Bir .a
dosya statik bir kütüphane iken, bir .so
dosya 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 .
.a
derleme sırasında sadece bir programın parçası olarak dahil edilebilir. .so
bir program yüklenirken '"içe aktarılabilir".
ar
yardımcı program kullanılarak oluşturulan nesne dosyaları topluluğudur . Burada daha fazla bilgi
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.)
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
.
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.