Sorunumu açıklamak için basit bir bağlantı kullanımıyla başlamak istiyorum. Paylaşılan kitaplık libz.dll (D: /libs/z/shared/libz.dll) veya statik kitaplık libz.a (D:/libs/z/static/libz) için derlenmiş olabilir bir kitaplık z
olduğunu varsayalım .a).MinGW ile Statik ve Dinamik/Paylaşımlı Bağlantı
gcc -o main.exe main.o -LD:/libs/z/static -lz
this documentation göre, gcc üyeleri nesne vardır
ben aşağıdakileri de yapabilirarşiv dosyaları olduğu libz.a, aramak olacaktır:
Let Sonra bunu, buna karşı bağlamak istediğiniz dosyalar
:
gcc -o main.exe main.o -LD:/libs/z/shared -lz
Yukarıdaki belgede, işaretinin lib<name>.so
için arama yapacağı belirtilmemiştir.
I libz.a ve libz.dll dosyası aynı dizinde olacaksa ne olur? Kütüphane bir programla nasıl bağlantılı olacak? Neden -l
hem paylaşılan hem de statik kitaplıklar için arama yapıyorsa, neden -Wl,-Bstatic
ve -Wl,-Bdynamic
numaralı bayraklara ihtiyacım var?
Paylaşılan kitaplık dağıtımını derlersek, bazı geliştiriciler .dll dosyalarını aynı modüller için neden sağlar? Örneğin, Qt, .dosya dosyalarını lib dizinindeki .a dosyaları içeren bin dizininde sağlar. Örneğin, Qt .dll dosyaları .dosyaları. Aynı kütüphane mi, yoksa paylaşılan ve statik gibi mi oluşturulmuş? Veya .a dosyaları, gerçek kütüphane uygulamalarının olduğu ortak kütüphanelerle bağlantı sağlayan bir çeşit kukla kütüphaneler midir?
Başka bir örnek, Windows'da OpenGL kitaplığıdır. Neden her derleyici MingW'deki libopengl32.a gibi statik OpenGL lib'i sağlamalıdır?
.dll.a ve .la uzantıları ile kullanılan dosyalar nedir?
P.S. Burada birçok soru var, ama sanırım her biri bir öncekine bağlı ve bunları birkaç soruya bölme gereği yok.
Cygwin örneğini ele alalım: benim anlayışım, cygwin ile derlenen programların çalışması için belirli bir dll'ye ihtiyaç duyması. Dll, belirli bir lisansa (ücretsiz olanlardan) bağlıdır ve programın ana bilgisayar sisteminde bulunmalıdır. Bir geliştirici olarak programla birlikte göndermeyi unutursanız, program çalışmaz. Başka bir örnek sürümü çakışan DLL'lerdir (örn. Opengl). Her sistemin farklı yetenekleri vardır ve bu nedenle belirli DLL'lerin farklı uygulamaları vardır. Yani bazen geliştiriciler doğru kütüphane sürümünü kullanmayı severler. – scones