Programa principal y biblioteca compartida inicializa misma variable estática en __static_initialization_and_destruction_0

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

Pregunta

¿Alguien sabe por qué una biblioteca inicializado dentro dlopen () sería inicializar una variable estática de propiedad del programa principal. Tanto el programa principal y biblioteca compartida tienen una copia de la variable estática, pero por alguna razón la biblioteca compartida vuelve a inicializar la copia del programa principal de la variable estática y se destruye, causando una violación de segmento cuando los principales intentos de programa para destruir a él.

¿Es este un caso de mala fama mangling en la tabla de símbolos?

¿Fue útil?

Solución

Este es un caso en el que el enlazador de tiempo de ejecución sólo quiere una sola copia activa de un símbolo en un proceso. Si tanto un objeto compartido y el ejecutable tienen una copia del símbolo, el enlazador en tiempo de ejecución va a resolver todas las referencias a uno de ellos.

¿Qué se puede hacer para resolver este problema consiste en la reducción del uso de símbolos utilizando el comando version del editor de enlace al construir el objeto compartido. Asegúrese de que el símbolo de la variable estática no es global y obtendrá el comportamiento que busca.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top