Sono possibili dipendenze dalla libreria statica nidificata?

8

Sto lavorando in QT.

  1. Una libreria statica può dipendere da un'altra libreria statica? (La statica Lib è fatta 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.

Si prega di spiegare lo scenario.

    
posta sk patra 19.09.2013 - 16:57
fonte

2 risposte

5

I miei rapidi due bit su questo: 10 (mi dispiace terribilmente scherzo).

Per espandere leggermente, ecco:

1- Una libreria statica può dipendere da un'altra libreria statica, niente o anche una libreria dinamica: nelle prime due istanze tutto il codice per la nuova libreria statica verrebbe incorporato nella nuova sll, tuttavia, la terza opzione, a seconda su ambiente potrebbe portare a sll avere uno dei seguenti risultati,

  • conterrebbe le versioni statiche del codice richiesto da esso raccolte dalla DLL
  • o, molto più orribilmente, avresti una libreria statica che, se inserita in un progetto, causerebbe il requisito di spedizione con una DLL, rompendo l'intero punto del collegamento statico.

Quindi, in breve, puoi 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 in lib1 senza la necessità di includere lib2 poichè lib2 sarebbe staticamente collegato in lib1 (si pensi alle bambole russe, dove lib2 è il più piccolo)

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

Prendi il seguente: Un file .h con riferimenti a 6 librerie collegate staticamente: è necessario includere 7 file nel progetto per ottenere la piena funzionalità

Unasllcheèstatacreatadadettofile.hrichiederebbesololanuovaslldaincludereperilcollegamentoallacompilazione:

Spero che questo aiuti e che ho capito quello che stavi chiedendo.

    
risposta data 07.10.2013 - 13:10
fonte
4

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 che è al di fuori dello standard. Quindi, questo ha le seguenti implicazioni:

1) Non riesco abbastanza a ottenere ciò che stai chiedendo qui, ma una libreria statica può molto dipendere da un'altra libreria statica. O prometti che le definizioni di quella libreria saranno disponibili durante la fase finale di collegamento del tuo eseguibile (fornendola come dipendenza dal collegamento). O lo "unisci" durante il collegamento della libreria statica.

2) La risposta a questo diventa quindi che l'unica cosa che devi fare è semplicemente non collegare in lib2 durante il collegamento di lib1.

In generale, l'approccio migliore della mia esperienza è quello di unire solo libs che sono private, la ragione è che altrimenti i client si imbatteranno in violazioni di simboli definiti multipli quando altre parti del loro progetto condividono con te le dipendenze.

    
risposta data 24.09.2013 - 17:45
fonte

Leggi altre domande sui tag