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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top