2

我需要一些关于 C++ 静态链接的基本说明。我有一个名为 data_client.lib 的文件。库文件 a.exe、b.exe 和 c.exe 有三个独立的使用者。有一个名为 data_server.exe 的服务,data_client.lib 是其接口。实际上,我在 data_server.exe 中添加了另一个函数,并在 data_client.lib 中添加了相应的接口。因为只有 a.exe 需要额外的功能,所以我只构建 a.exe。我将 data_server.exe、data_client.exe 和 a.exe 作为补丁发布。现在,b.exe 和 c.exe 随机/不一致地崩溃抛出

mfc42u!CException::`RTTI Complete Object Locator'+0x10

是否有意义?如果我还构建 b.exe 和 c.exe,则不会发生崩溃。这是它的工作方式吗?

4

3 回答 3

2

也许您没有明确的依赖关系,但您的一些项目标头使用,或将信息隐式放入您的库中。

于 2009-11-30T13:55:35.720 回答
2

我不知道这个错误,但您的应用程序 b.exe 和 c.exe 正在使用旧版本的绑定库与新版本的 data_server.exe 进行通信。如果你添加了一个函数,一些 v_table 索引可能会关闭或其他东西。您肯定必须重建所有库。

于 2009-11-30T14:01:45.380 回答
2

实际上,我在 data_server.exe 中添加了另一个函数,并在 data_client.lib 中添加了相应的接口。

这有点不清楚到底是什么添加到您的库中。但是,如果它是添加到类中的一个或多个新方法(而不仅仅是一些新的独立函数),那么重新编译所有内容很有可能会解决您的问题。vtable可能会也可能不会因您的更改而失控。

您的崩溃也可能与此完全无关,并且还有其他一些问题正在发生......但根据您的描述,我的钱是在一个 vtable 问题上。如果是我,我会重新编译 b.exe 和 c.exe 并再次测试,然后再调查其他问题。

于 2009-11-30T14:51:16.247 回答