作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 mingw 和来自 linux 的交叉编译为 Win32 开发插件。虽然我的插件成功地被应用程序加载,我什至从应用程序获得了一个 com 接口(interface),但我无法从那里调用函数 - 应用程序崩溃了。我认为这是由于 mingw 中接口(interface)实现的 vtable 对齐错误(这与 MSVS 完美配合)。
任何帮助将不胜感激,谢谢。
最佳答案
VTable 对齐(事实上,整个 VTable 系统)完全依赖于实现。您必须使用相同的编译器,使用相同的开关/设置进行编译,以便在链接后获得可运行的程序。
出于这个原因,您不能将 msvc 生成的二进制文件与 MinGW 生成的二进制文件链接起来。即使您让表对齐相同,名称修改算法也不同,而且没有人说两个编译器会为 vtable 本身内的各个函数选择相同的顺序。
如果您需要两个编译器之间的可移植接口(interface),那么您必须使用具有标准化 ABI 的 C(技术上是 extern "C"
)接口(interface)来实现。
关于c++ - 如何为虚函数设置对齐方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4290192/
我是一名优秀的程序员,十分优秀!