Programme principal et bibliothèque partagée initialise même variable statique dans __static_initialization_and_destruction_0

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

Question

Quelqu'un sait pourquoi une bibliothèque initialisée au sein dlopen () serait initialiser une variable statique appartenant au programme principal. Le programme principal et la bibliothèque partagée ont une copie de la variable statique, mais pour une raison quelconque la bibliothèque réinitialise la copie du programme principal partagé de la variable statique et destructs, provoquant une erreur de segmentation lorsque les tentatives principales du programme de détruire ce.

Est-ce un cas de mauvais nom mutiler dans la table des symboles?

Était-ce utile?

La solution

Ceci est un cas où l'éditeur de liens d'exécution veut qu'une seule copie active d'un symbole dans un processus. Si à la fois un objet partagé et l'exécutable ont une copie du symbole, l'éditeur de liens d'exécution résoudra toutes les références à un.

Qu'est-ce que vous pouvez faire pour résoudre ce problème consiste à utiliser la réduction des symboles en utilisant la commande version de l'éditeur de liens lors de la construction de l'objet partagé. Assurez-vous que le symbole de la variable statique n'est pas globale et vous obtiendrez le comportement que vous recherchez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top