Pregunta

Necesito algunas aclaraciones básicas sobre el enlace estático de C ++. Tengo un archivo llamado data_client.lib. Hay tres consumidores independientes para el archivo de biblioteca a.exe, b.exe y c.exe. Hay un servicio llamado data_server.exe para el cual data_client.lib es la interfaz. En realidad, agregué otra función a data_server.exe y la interfaz correspondiente a data_client.lib. Como solo a.exe necesita la funcionalidad adicional, construyo solo a.exe. Envié data_server.exe, data_client.exe y a.exe como parche. Ahora, b.exe y c.exe fallan al azar / inconsistentemente arrojando

  

mfc42u! CException :: `RTTI completo   Localizador de objetos '+ 0x10

¿Tiene sentido? Si también construyo b.exe y c.exe, entonces el bloqueo no ocurre. ¿Es así como funciona?

¿Fue útil?

Solución

  

En realidad, agregué otra función a data_server.exe y la interfaz correspondiente a data_client.lib.

No está claro a partir de esto exactamente qué se agregó a su biblioteca. Sin embargo, si se trata de un nuevo método o métodos agregados a una clase (en lugar de solo algunas funciones independientes nuevas), existe una gran posibilidad de que recompilar todo solucione su problema. El vtable puede o no haber quedado fuera de control por sus cambios.

También es posible que sus bloqueos no tengan absolutamente nada que ver con esto y que exista algún otro problema ... pero según su descripción, mi dinero está en un problema de vtable. Si fuera yo, recompilaría b.exe y c.exe y probaría nuevamente antes de investigar otros problemas.

Otros consejos

Tal vez no tenga dependencias explícitas, pero algunos de los encabezados de su proyecto usan o colocan información implícitamente en su biblioteca.

No conozco el error, pero sus aplicaciones b.exe y c.exe están utilizando una versión anterior de la biblioteca de enlace para comunicarse con una versión más nueva de data_server.exe. Algunos índices de v_table pueden estar desactivados o algo así si agrega una función. Definitivamente tienes que reconstruir todas las bibliotecas.

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