Pergunta

Eu preciso de alguns esclarecimentos básicos sobre vinculação estática C ++. Eu tenho um arquivo chamado data_client.lib. Há três consumidores independentes para o a.exe arquivo de biblioteca, b.exe e c.exe. Há um serviço chamado data_server.exe para o qual data_client.lib é a interface. Na verdade, I adicionou uma outra função à interface correspondente data_server.exe e para data_client.lib. Desde apenas a.exe precisa a funcionalidade extra, eu construir a.exe somente. I enviado data_server.exe, data_client.exe e a.exe como patch. Agora, b.exe e c.exe aleatoriamente / inconsistente trava jogando

mfc42u! CException :: `RTTI completa Locator objeto '+ 0x10

Será que faz sentido? Se eu também construir b.exe e c.exe, em seguida, o acidente não acontece. É este o modo como funciona?

Foi útil?

Solução

Na verdade, I adicionou uma outra função à interface correspondente data_server.exe e para data_client.lib.

É um pouco obscuro a partir deste exatamente o que foi adicionado à sua biblioteca. No entanto, se é um novo método ou métodos adicionados a uma classe (em vez de apenas algumas novas funções autônomas), há uma chance muito alta de que recompilar tudo vai resolver o seu problema. A vtable pode ou não ter sido jogado fora de louco por suas alterações.

Também é possível que seus acidentes não têm absolutamente nada a ver com isso e não há algum outro problema acontecendo ... mas a partir de sua descrição, meu dinheiro é sobre uma questão vtable. Se fosse comigo, eu recompilar b.exe e c.exe e teste novamente antes de investigar outras questões.

Outras dicas

Talvez você não tem dependências explícitas, mas alguns de seus cabeçalhos projeto usa ou informações put implicitamente para a sua biblioteca.

Eu não sei sobre o erro, mas suas aplicações b.exe e c.exe estiver usando uma versão mais antiga do lib obrigatório para se comunicar com uma versão mais recente do data_server.exe. Alguns índices v_table pode estar desligado ou algo se você adicionou uma função. Você definitivamente tem que reconstruir todas as bibliotecas.

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