Principale del programma e libreria condivisa inizializza stessa variabile statica in __static_initialization_and_destruction_0

StackOverflow https://stackoverflow.com/questions/2631918

Domanda

Qualcuno sa il motivo per cui una libreria inizializzato all'interno di dlopen () sarebbe inizializzare una variabile statica di proprietà del programma principale. Sia il programma principale e libreria condivisa hanno una copia della variabile statica, ma per qualche motivo la libreria condivisa ri-inizializza la copia del programma principale della variabile statica e distrugge, causando un segfault quando i principali tentativi di programma per distruggere esso.

Si tratta di un caso di cattiva reputazione pressare nella tabella dei simboli?

È stato utile?

Soluzione

Questo è un caso in cui il linker runtime vuole solo una singola copia attiva di un simbolo in un processo. Se sia un oggetto condiviso e l'eseguibile hanno una copia del simbolo, il linker runtime risolverà tutti i riferimenti a uno di quelli.

Cosa si può fare per risolvere questo problema è quello di ridurre l'uso dei simboli con il comando versione dell'editor di collegamento quando si costruisce l'oggetto condiviso. Assicurarsi che il simbolo per la variabile statica non è globale e si otterrà il comportamento che si sta cercando.

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