Programa principal e biblioteca compartilhada inicializa a mesma variável estática em __static_initialization_and_destruction_0

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

Pergunta

Alguém sabe por que uma biblioteca inicializada no DLopen () inicializaria uma variável estática de propriedade do programa principal. Tanto o programa principal quanto a biblioteca compartilhada têm uma cópia da variável estática, mas, por algum motivo, a biblioteca compartilhada reinicializa a cópia do programa principal da variável estática e a destruiu, causando um segfault quando o programa principal tenta destruí-lo.

Este é um caso de mau nome que mutilar na tabela de símbolos?

Foi útil?

Solução

Este é um caso em que o vinculador de tempo de execução deseja apenas uma única cópia ativa de um símbolo em um processo. Se um objeto compartilhado e o executável tiverem uma cópia do símbolo, o vinculador de tempo de execução resolverá todas as referências a uma delas.

O que você pode fazer para resolver esse problema é usar a redução de símbolos usando o Comando de versão do editor de link ao criar o objeto compartilhado. Verifique se o símbolo da variável estática não é global e você obterá o comportamento que está procurando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top