ABI交叉检查

时间:2015-04-26 18:47:56

标签: c++ mingw abi

我正在寻找一些方法来交叉检查两个不同库的兼容性,这两个库应该共享相同的基本符号。

所以,我有libCommon,libA和libB以及​​我的应用程序。 libB使用libCommon中的符号和libA。我将两者编译到我的应用程序中,然后发现应用程序似乎在libA / libCommon和libB / libCommon边界上崩溃。

由此,我假设在构建libA或libB时,无意中为libCommon生成了不同的ABI(可能是使用-DEXTRA_STRUCT_STUFF或不同的gcc填充或其他东西编译的)。要么在我的应用程序中发生,要么在编译libA和libB时发生。

有什么方法可以提出以下问题:

我可以安全地将libA和libB混合到一个应用程序中吗? 我的应用程序中是否一直使用libA和libB的共享符号?

这可以帮助我缩小问题出现的地点和原因。

请注意,ABI合规性检查程序不是我想要的(AFAICS)。 libA和libB是单独的项目,并做不同的事情。

我试图解决的真正问题是在windows应用程序中从wxWidgets调用时libstdc ++中的真正崩溃。应用程序本身是使用mingw在Debian下交叉编译的。

以前的编译尝试都有效 - 只有当我使用较新的库版本重建工具链时才会出现这些问题。

感谢。

编辑:不确定它是否相关,但是我注意到objdump显示了dll的som的不同标志: $ i686-w64-mingw32-objdump -f * .dll | grep标志|排序| uniq的 架构:i386,标志0x00000103: 架构:i386,标志0x00000133: 架构:i386,标志0x0000013b:

尽管103 dll已加载但通常不会被调用。

0 个答案:

没有答案