Staticamente e dinamicamente che collega la stessa libreria
-
11-09-2019 - |
Domanda
Ho un programma che è staticamente il collegamento a una libreria (libA.2.0.a
) e collega dinamicamente a un'altra libreria (libB.so
). libB.so
anche collega dinamicamente a una versione precedente di Liba (libA.1.0.so
).
E 'questa configurazione possibile? E se sì, in che modo il sistema sa di utilizzare i simboli dal libA.2.0.a
per il mio programma ed i simboli dal libA.1.0.so
per libB.so
?
Soluzione
Sì, questa configurazione è possibile.
In risposta alla vostra domanda su come il sistema sa come usare i simboli, ricordare che tutti i collegamenti accadere al momento della compilazione. Dopo che è stato costruito, non è una questione di "simboli", le chiamate solo per le varie funzioni a vari indirizzi.
Quando si costruisce libB.so, esso imposta esso è collegamenti a libA.1.0.so. Essa non conosce o non interessa quello che altre applicazioni che utilizzano lo farà, si sa solo come mappare le proprie chiamate di funzione.
Quando crea l'applicazione stessa, i link di richiesta a libB.so. Qualunque sia libB.so chiama è completamente sconosciuto per l'applicazione. L'applicazione anche collega in modo statico a una biblioteca, che libB.so non si preoccupa.
Una Gotcha: se Liba utilizza variabili statiche, ci sarà una serie di statica accessibili a libB.so, e un diverso, insieme indipendente di statica accessibili per l'applicazione.