İç İçe Statik Kütüphane bağımlılıkları mümkün müdür?


12

QT'de çalışıyorum.

  1. Statik kütüphane başka bir statik kütüphaneye bağımlı olabilir mi? (Statik Lib, başka bir statik lib bağlanarak yapılır)
  2. Evetse, lib2'ye bağlandıktan sonra oluşturulan lib'in (lib1) tüm lib2 kodlarını içermemesi mümkün müdür?

Qt Projemde birden çok kütüphaneye bağlı olan statik bir kütüphane kullanıyorum. Kodumda sadece bir lib (ve bu sınıfın bir .h) olmasına rağmen, tüm kütüphaneleri (projemdeki tüm üstbilgileriyle) eklemek zorunda kaldım.

Lütfen senaryoyu açıklayınız.

Yanıtlar:


6

Bir şey beyan ettiğinizde, bağlantı sırasında kullanılabilir ve benzersiz bir şekilde tanımlanacağına söz verirsiniz. Statik lbs, standardın dışında bir formatta tanımlar için kaplardan başka bir şey değildir. Yani, bunun aşağıdaki sonuçları vardır:

1) Ben yok oldukça burada soruyorsun olsun, ama bir statik kitaplık çok başka statik kütüphanesinden bağlı olabilir. Bu kütüphanenin tanımlarının, yürütülebilir dosyanızın son bağlantı aşamasında (bağlantı bağımlılığı olarak sağlayarak) kullanılabilir olacağına söz verirsiniz. Veya statik lib bağlantısı sırasında "birleştirme".

2) Bunun cevabı, yapmanız gereken tek şey, lib1'in bağlanması sırasında lib2'ye bağlanmak değildir.

Genel olarak benim deneyimimdeki en iyi yaklaşım, sadece özel olan kütüphaneleri birleştirmektir, bunun nedeni, aksi takdirde müşterilerin, projelerinin diğer bölümleri sizinle olan bağımlılıkları paylaştığında, tanımlanmış sembol ihlallerine çarpmasıdır.


Bu, başka bir statik lib'e bağlı olan, ancak bu lib'in bağlantı bilgilerini içeren statik bir lib OLASI OLDUĞU anlamına gelir.Bu, projeme ilk lib'i eklemem gerektiğinde, ikincisini de dahil etmem gerektiği anlamına gelir. Bcoz, ilk lib ikinci lib kodlarının tamamını içermiyor, değil mi?
sk patra

6

Bu benim hızlı iki bit: 10 (üzgünüm korkunç şaka).

Hafifçe genişlemek için:

1- Statik bir kütüphane başka bir statik kütüphaneye, hiçbir şeye, hatta bir dinamik kütüphaneye bağlı olabilir: ilk iki durumda yeni statik kütüphanenin tüm kodu yeni SLL'ye (Statik Bağlantı Kütüphanesi) dahil edilecektir, ancak 3. seçenek , duruma bağlı olarak SLL'nin aşağıdaki sonuçlardan birine sahip olmasına yol açabilir,

  • DLL'den toplanan kodun statik sürümlerini içerecektir (Dinamik Bağlantı Kütüphanesi)
  • veya çok daha korkunç bir şekilde, bir projeye dahil edildiğinde bir DLL ile gönderim gereksinimine neden olacak ve statik bağlamanın tüm noktasını kıracak statik bir kütüphaneye sahip olursunuz.

Kısacası, statik bir kütüphaneyi statik bir kütüphaneye bağlayabilirsiniz

2- lib1 ve lib2'nin her ikisi de statikse ve lib1 lib2 ile bağlantılıysa, lib2'nin lib1 içinde statik olarak bağlantılı olacağı için lib2 içinde lib2 dahil edilmesine gerek kalmadan tüm lib2 işlevselliği lib1 içinde kullanılabilir olacaktı (Rus bebeklerini lib2 ile düşünün küçük olmak).

Açıkladığınız senaryoda, eklemeniz gereken dosyaların her birinde ayrı bir işlevsellik olması gerekir, bu da statik olarak bağlı değildir, bu nedenle birden çok dosyaya ihtiyaç duyar, aksi takdirde dahil edilecek tek bir dosyanız olur ve iyi olursunuz.

Aşağıdakileri alın: Statik olarak bağlı 6 kütüphaneye referans veren bir .h dosyası: tam işlevselliği elde etmek için projenize 7 dosya eklemeniz gerekir

dahil etme örneği 1

Adı geçen .h Dosyasından oluşturulan bir SLL, derleme sırasında bağlantı için yalnızca yeni SLL'nin dahil edilmesini gerektirir:

dahil etme örneği 2

Umarım bu yardımcı olur ve ne istediğini anladım.

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.