.A ve .so dosyaları nedir?


427

Şu anda bir C uygulaması AIX için bağlantı noktası çalışıyorum ve karışıyorum. .A ve .so dosyaları nedir ve bir uygulama oluştururken / çalıştırırken nasıl kullanılır?


116
biri kütüphane aarşividir, diğeri ise snefret edilen object
Shiplu Mokaddim

Yanıtlar:


483

Arşiv kitaplıkları (.a) statik olarak bağlanır, yani programınızı gcc'de -c seçeneği ile derlediğinizde. Bu nedenle, kitaplıkta herhangi bir değişiklik varsa, kodunuzu tekrar derlemeniz ve oluşturmanız gerekir.

.So (paylaşılan nesne) 'nin .a kitaplığı üzerindeki avantajı, çalışma zamanı sırasında, yani gcc'de .o dosyası -o seçeneğinizin oluşturulmasından sonra bağlantılı olmalarıdır. Bu nedenle, .so dosyasında herhangi bir değişiklik varsa, ana programınızı yeniden derlemenize gerek yoktur. Ancak ana programınızın ln komutu ile yeni .so dosyasına bağlı olduğundan emin olun.

Bu, .so dosyalarını oluşturmanıza yardımcı olacaktır. http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

Bu yardımcı olur umarım.


2
bunlardan herhangi biri pic(pozisyondan bağımsız kod) ile ilgili mi?
transang

213

.a statik kütüphanelerdir. İçlerinde depolanan kodu kullanırsanız, bunlardan alınır ve kendi ikili dosyalarınıza gömülür. Visual Studio'da bunlar .lib dosyaları olacaktır.

.so dinamik kütüphanelerdir. İçlerinde depolanan kodu kullanırsanız, bu kod kendi ikilinize alınmaz ve gömülmez. Bunun yerine sadece başvuruda bulunur, böylece ikili dosya onlara bağlı olacaktır ve bu nedenle dosyadaki kod çalışma zamanında eklenir / yüklenir. Visual Studio / Windows'da bunlar .dll dosyaları (bağlantı bilgilerini içeren küçük .lib dosyalarıyla) olacaktır.


merhaba .so dosyasını c / c ++ kodunda koda etmek için herhangi bir seçenek var mı?
17'de Jishant


İçin küçük bir .libdosyaya .dlliçe aktarma kitaplığı denir.
Para Odaklı Programcı

13

.a dosyaları genellikle statik olarak bağlanan (veya daha doğru arşivler)
kütüphanelerdir ve .so dinamik olarak bağlantılı kütüphanelerdir.

Bağlantı noktası yapmak için bunları derlemek için derlenen kaynak koduna veya AIX makinenizdeki eşdeğer dosyalara ihtiyacınız olacaktır.


.So dosyalarını kullanmak için uygulamamı nasıl oluştururum?
Dunc

Her iki kütüphane türünü de oluşturmak ve bunlara web'de bağlanmak için birçok mükemmel referans vardır. Google Senin Arkadaşın.
David Pointer

@Dunc - Birkaç yol var. Bir makyaj dosyanız var mı? Genellikle tüm programı birleştiren komut (ve dolayısıyla bağlayıcıyı çağırır) -L / dir / dir1 /.../ ile kütüphane dosyalarını arayacak yerleri belirtir ve kütüphaneleri açıkça -lname ile isimlendirebilir. Gerçek adın libname.a veya libname.so olduğunu göreceksiniz. Bağlayıcı daha sonra bu normal bir programsa ne yapılacağını bulabilir. Ancak yine de .so dosyasını bulma veya bulma sorununuz var. Oluşturmak için kaynak kodunuz veya bir AIX kütüphaneniz var mı?
gbulmer

10

Bağlama aşamasında kullanılırlar. .aexe'yi .soher çalıştırdığınızda kütüphaneye ihtiyaç duyulması için dosyalar statik olarak bağlanır ve dosyalar bir şekilde bağlanır.

Nerede depolandıklarını lib dizinlerinden herhangi birine bakarak bulabilirsiniz ... /usr/libve /libçoğuna sahip ve ayrıca LIBRARY_PATHortam değişkeni var.


0

Wikipedia bu bilgi için iyi bir kaynaktır.

.A gibi statik kütüphane dosyaları hakkında bilgi edinmek için Statik kütüphaneyi okuyun

.So gibi paylaşılan kütüphane dosyaları hakkında bilgi edinmek için Library_ (computing) #Shared_libraries okuyun Bu sayfada, Dosya adlandırma bölümünde de yararlı bilgiler bulunmaktadır .

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.