acquaman/acquaman — comment on commit c3204e26a6e6903ba19636a9686d8bd2d359f5ec
File:  line 0
By markboots:

Hey Darren, are you sure this wasn't just a case of the plugin projects needing to be rebuilt? The reason I wonder is that I didn't add those brackets in my warning cleanup... They were already there, and apparently working before.

It seems from experience so far that the plugins are only binary-compatible if built at the same time as the app. This is because although the app calls the plugin functions through dynamic linking, the plugins call framework functions (ex: functions in AMScan) statically. If the address of those functions changes without re-compiling the plugins, there will be crashes.

This also happens inside the framework with functions that are inlined. If A.cpp inlines functions from another object in B.cpp, B.cpp changes, and B.h is #included in A.h, then make will take care of rebuilding A.cpp. But if B.h uses forward declaration and is only included in A.cpp, then the make system won't rebuild A.cpp -- causing crashes when it calls that inline function at an address that is no longer correct.

As far as I know, the only surefire way around this is a full rebuild.