Biliyorum. O nesne dosyaları, .a statik kütüphaneler ve .so dinamik kütüphaneler nelerdir? Fiziksel önemi nedir? Ne zaman ve ne zaman kullanabilirim?.o .a ve .so dosyaları arasındaki fark nedir?
kütüphane dosyaları paylaşıldığı .bucevap
. .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
Ayrıca çalışma zamanında kütüphanelerin yüklenmesi için bir yol yok mu? – Pacerier
.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.
"* .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
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.
'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 –
- 1. .so ve .a dosyaları arasındaki fark nedir?
- 2. crt0.o ve crt1.o - Fark nedir?
- 3. apklib ve jar dosyaları arasındaki fark nedir?
- 4. Bir .so ve .lo dosyası arasındaki fark nedir?
- 5. "Arkadaş yapısı A" arasındaki fark nedir? ve "arkadaş A;" sözdizimi?
- 6. ELF dosyaları ve bin dosyaları arasındaki fark nedir?
- 7. /arasındaki fark nedir o/ve/\ Ait \ Z/Ruby
- 8. Bir .o nesne dosyası ile .so kitaplığı dosyası arasındaki fark nedir?
- 9. Vim'de CTRL-T ve CTRL-O arasındaki fark nedir?
- 10. Win32 API'sında `A` ve` W` işlevleri arasındaki fark nedir?
- 11. Java arasındaki fark nedir
- 12. Python'da {} ve [] arasındaki fark nedir?
- 13. UNIX'teki $ @ ve $ * arasındaki fark nedir?
- 14. $ arasındaki fark nedir? ve PowerShell
- 15. Etag ve Expires başlığı arasındaki fark nedir?
- 16. M4A ve AAC Ses Dosyaları arasındaki fark nedir?
- 17. .LIB ve .OBJ dosyaları arasındaki fark nedir? (Visual Studio C++)
- 18. Yapı ve dağıtım klasörü arasındaki fark nedir?
- 19. Fark() arasındaki fark nedir mustache.js
- 20. app.doScript ve $ .evalFile arasındaki fark nedir?
- 21. @include ve userscripts'taki tutar arasındaki fark nedir?
- 22. 7zip'in 7z.sfx ve 7zsd.sfx arasındaki fark nedir?
- 23. NSInvocation ve block arasındaki fark nedir?
- 24. os.path.isdir() kullanırken './' ve '../' arasındaki fark nedir?
- 25. Scalaz'da Task ve IO arasındaki fark nedir?
- 26. CakePHP'de yönlendirme ve render arasındaki fark nedir?
- 27. Var t: MyClass = MyClass (o) arasındaki fark nedir; ve var t: MyClass = o MyClass olarak;
- 28. Control.Enter ve Control.GotFocus olayları arasındaki fark nedir?
- 29. Desen ve yol arasındaki fark nedir?
- 30. setDisplayHomeAsUpEnabled ve setHomeButtonEnabled arasındaki fark nedir?
Neden Java ile etiketlenmiş? – JonK