Sono possibili dipendenze della libreria statica nidificata?


12

Sto lavorando in QT.

  1. Una libreria statica può dipendere da un'altra libreria statica (la lib statica viene creata collegando un'altra lib statica)
  2. Se sì, è possibile che dopo il collegamento a lib2, la lib generata (lib1) non contenga tutti i codici di lib2?

Nel mio progetto Qt sto usando una libreria statica, che dipende da più librerie. Ho dovuto aggiungere tutte le librerie (con tutte le loro intestazioni nel mio progetto), anche se ho bisogno di una sola lib (e una .h di quella classe) nel mio codice.

Per favore, spiega lo scenario.

Risposte:


6

Quando dichiari qualcosa prometti solo che durante il collegamento sarà disponibile e identificato in modo univoco. Le librerie statiche non sono altro che contenitori per le definizioni in un formato esterno allo standard. Quindi, questo ha le seguenti implicazioni:

1) Non capisco esattamente quello che mi stai chiedendo qui, ma una libreria statica può dipendere molto da un'altra libreria statica. O prometti che le definizioni di quella libreria saranno disponibili durante la fase di collegamento finale del tuo eseguibile (fornendolo come dipendenza del collegamento). Oppure lo "unisci" durante il collegamento della lib statica.

2) La risposta a questa domanda diventa allora che l'unica cosa che devi fare è semplicemente non collegarti in lib2 durante il collegamento di lib1.

Nel complesso, l'approccio migliore nella mia esperienza è quello di unire solo librerie che sono private, il motivo è che altrimenti i clienti incontreranno violazioni di simboli moltiplicati quando altre parti del loro progetto condividono dipendenze con voi.


Significa, una lib statica che dipende da un'altra lib statica, ma che contiene le informazioni di collegamento di quella lib È POSSIBILE. Ciò significa che quando devo includere la prima lib nel mio progetto, sono obbligato a includere anche la seconda. Bcoz, la prima lib non contiene interi codici della seconda lib. Ho ragione?
sk patra,

6

I miei due rapidi bit su questo: 10 (scusate lo scherzo terribile).

Per espandere leggermente, ecco qui:

1- Una libreria statica può dipendere da un'altra libreria statica, nulla o addirittura una libreria dinamica: nelle prime due istanze tutto il codice per la nuova libreria statica verrebbe incorporato nella nuova SLL (Static Link Library), tuttavia la terza opzione , a seconda dell'evironment, la SLL potrebbe avere uno dei seguenti risultati,

  • conterrebbe le versioni statiche del codice richiesto da esso raccolte dalla DLL (Dynamic Link Library)
  • o, molto più orribilmente, avresti una libreria statica che, se inclusa in un progetto, causerebbe il requisito della spedizione con una DLL, interrompendo l'intero punto del collegamento statico.

Quindi in breve, è possibile collegare una libreria statica a una libreria statica

2- se lib1 e lib2 sono entrambi statici e lib1 è stato collegato a lib2, allora tutte le funzionalità di lib2 sarebbero disponibili all'interno di lib1 senza la necessità di includere lib2 poiché lib2 sarebbe staticamente collegato all'interno di lib1 (pensa alle bambole russe, con lib2 essendo il più piccolo).

Nello scenario che descrivi ci deve essere una funzionalità discreta disponibile in ciascuno dei file che devi includere, che non è staticamente collegata, quindi la necessità di più file, altrimenti avresti un singolo file da includere e andresti bene.

Prendi quanto segue: Un file .h con riferimenti a 6 librerie collegate staticamente: per ottenere la piena funzionalità dovrai includere 7 file nel tuo progetto

esempio di inclusione 1

Un SLL che è stato creato da detto file .h richiederebbe di includere solo il nuovo SLL per il collegamento durante la compilazione:

esempio di inclusione 2

Spero che questo aiuti e che io abbia capito cosa mi stavi chiedendo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.