.dll
veya .so
paylaşılan kütüphaneler (çalışma zamanında bağlı), .a
ve .lib
statik bir kitaplık (derleme zamanında bağlı). Bu Windows ve Linux arasında bir fark yok.
Aralarındaki fark, nasıl ele alındıklarıdır. Not: fark sadece gümrükte, nasıl kullanılırlar. Linux'u Windows yolunda oluşturmak çok zor olmazdı, bunun tersi de pratikte hiç kimse bunu yapmıyor.
Bir dll kullanırsak veya kendi ikili dosyamızdan bile bir işlev çağırırsak, basit ve net bir yol vardır. Örneğin, C'de şunu görüyoruz:
int example(int x) {
...do_something...
}
int ret = example(42);
Ancak asm düzeyinde birçok fark olabilir. Örneğin, x86'da, bir call
opcode yürütülür ve 42
yığın üzerinde verilir. Veya bazı kayıtlarda. Veya herhangi bir yerde. Kimse dll yazmadan önce , nasıl kullanılacağını bilmiyor. Ya da projelerin bunu nasıl kullanmak isteyeceği, şu anda var olmayan bir derleyici (veya bir dilde!) İle yazılmış olabilir (veya dll geliştiricileri için bilinmemektedir).
Örneğin, varsayılan olarak, hem C hem de Pascal bağımsız değişkenleri yığından koyar (ve dönüş değerlerini alır) - ancak bunu farklı sırayla yaparlar . Ayrıca, derleyicilerdeki bazı optimizasyonlarla kayıtlardaki işlevleriniz arasında argüman alışverişi yapabilirsiniz.
Doğru gördüğünüz gibi, Windows özel bir dll oluşturmak, biz de minimal oluşturmak .a
/.lib
. Bu minimal statik kütüphane sadece bir sarıcı, o dll sembolleri (fonksiyonları) içinden ulaşılır. Bu, gerekli asm düzeyi arama dönüşümlerini yapar.
Avantajı uyumluluktur. Bunun dezavantajı, yalnızca bir .dll dosyanız varsa, işlevlerinin nasıl çağrılmasını istediğini anlamak için zor bir zamanınız olabilir. Bu dlls kullanımını bir korsanlık görevi yapar,Eğer dll geliştiricisi size vermezse, bu.a
. Bu nedenle, çoğunlukla kapalılık amaçlarına hizmet eder, örneğin SDK'lar için ekstra nakit elde etmek daha kolaydır.
Bir başka dezavantajı, dinamik bir kütüphane kullansanız bile, bu küçük sargıyı statik olarak derlemeniz gerekir.
Linux'ta dll'lerin ikili arayüzü standarttır ve C kuralını izler. Bu nedenle, hayır .a
gerekli ve paylaşılan kütüphaneler arasında ikili uyumluluk var, karşılığında microsoft custom'un avantajlarına sahip değiliz.