Aviso das ferramentas de vinculador LNK4092
a seção 'section' gravável compartilhada contém realocações; a imagem pode não ser executada corretamente
O vinculador emitirá esse aviso sempre que você tiver uma seção compartilhada para avisar você de um problema potencialmente grave.
Uma maneira de compartilhar dados entre vários processos é marcar uma seção como "compartilhada". No entanto, marcar uma seção como compartilhada pode causar problemas. Por exemplo, você tem uma DLL que contém declarações como esta em uma seção de dados compartilhados:
int var = 1;
int *pvar = &var;
O vinculador não pode resolver pvar
porque valor dela depende de onde a DLL é carregada na memória, portanto, ele coloca um registro de realocação na DLL. Quando a DLL é carregada na memória, o endereço de var
pode ser resolvido e pvar
atribuído. Se outro processo carregar a mesma DLL, mas não puder carregá-la no mesmo endereço, a realocação do endereço de var
será atualizada para o segundo processo e o espaço de endereço do primeiro processo apontará para o endereço errado.