ABI cross-checking


I am looking for some way to cross-check the compatability of two differing libraries, which should share the same base symbols.

So, I have libCommon, libA and libB and my application. libB uses symbols from libCommon as does libA. I compile both into my application, and then find that the application seems to crash on the libA/libCommon and libB/libCommon boundaries.

From this, I assume that when building libA or libB, a differing ABI has been generated for libCommon inadvertently (perhaps one was compiled with -DEXTRA_STRUCT_STUFF, or different gcc padding, or something). either this is happening in my application, or when compiling libA and libB.

Is there any way I can ask the following questions:

Can I mix libA and libB into an application safely? Has libA and libB's shared symbols been used consistently in my application?

This would help me narrow down where and why the problem is occuring.

Note that the ABI Compliance checker is not what I want (AFAICS). libA and libB are separate projects, and do different things.

The real problem I am trying to solve is a real crash in libstdc++ when being called from wxWidgets in a windows application. The application itself is cross-compiled under Debian using mingw.

Previous attempts at compiling have worked - only when I rebuilt the toolchain using newer library versions have these problems arisen.


Edit : Not sure if it is relevant, however I have noticed objdump shows different flags for som of the dlls: $ i686-w64-mingw32-objdump -f *.dll | grep flags | sort | uniq architecture: i386, flags 0x00000103: architecture: i386, flags 0x00000133: architecture: i386, flags 0x0000013b:

Though the 103 dll is loaded but not normally called.

asked on Stack Overflow Apr 26, 2015 by SomeoneHere • edited Apr 26, 2015 by SomeoneHere

0 Answers

Nobody has answered this question yet.

User contributions licensed under CC BY-SA 3.0