什么会导致非虚拟 thunk 的损坏名称更改为 XXX

问题描述

我构建了一个中间件库 (wxWidgets),其中包含一组补丁,用于修复问题并添加一些功能(针对 Audacity)。

针对打过补丁的二进制文件运行之前构建的客户端应用程序 (Audacity) 副本,我收到关于 non-virtual thunk to wxTextCtrl::Cut() 的丢失符号错误。针对打补丁的库重建的应用运行良好,但是当我尝试针对未打补丁的库运行它时出现同样的错误

事实证明,这个非虚拟 thunk 存在于两个库中,但名称不同(_ZThn1344_N10wxTextCtrl3CutEv_ZThn1352_N10wxTextCtrl3CutEv)。

据我所知,补丁根本不接触 wxTextCtrl

造成这种差异的原因是什么?

解决方法

在这种情况下,原因是激活了 wxWidgets 中的辅助功能。我还没有追查到底发生了什么变化;该功能为大量类添加了方法。