it-swarm-tr.com

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

Anladığım kadarıyla bunlar kütüphane, ama ikisi arasındaki fark nedir?

70
Erik B

A .a dosyası statik bir kitaplıkken, _ .so dosyası, DLL benzeri) paylaşılan bir nesne (dinamik) kitaplığıdır. bu sayfa.

55
ajk

Aşağıdaki gibi, bir .a dosyası bir "ar" arşividir. Bir tar arşivinden farklı olarak, .o veya nesne dosyalarını depolayarak arşivden çıkarılmasına ve diğer şeylerin yanı sıra bir programa bağlanmasına izin verir. İsterseniz diğer dosyaları saklamak için ar kullanabilirsiniz.

-T parametresiyle bir ar dosyasının üyelerinin bir listesini alabilirsiniz, örneğin:

ar -t /usr/lib/libc.a

Bir .so dosyası "paylaşılan nesne" dosyasıdır ve bağlayıcıların kullanabileceği çok daha fazla bilgiye sahiptir, böylece üyeler bir yükleme programına olabildiğince hızlı bir şekilde bağlanabilir.

Örneğin, şunu deneyin:

objdump -T /lib/libc-2.11.1.so

(veya libc.so sürümünüz/lib dizininizde bulunan herhangi bir sürümdür.) Bir .so dosyasının yalnızca dosyayı başka bir yerde bulması veya başka bir şey kullanması için yönlendiren bir bağlayıcı komut dosyası içerebileceğini unutmayın.

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

29
Hack Saw