@@ -276,6 +276,7 @@ bool Plugin::load(color_ostream &con)
276276
277277 plugin_check_symbol (" plugin_name" )
278278 plugin_check_symbol (" plugin_version" )
279+ plugin_check_symbol (" plugin_abi_version" )
279280 plugin_check_symbol (" plugin_self" )
280281 plugin_check_symbol (" plugin_init" )
281282 plugin_check_symbol (" plugin_globals" )
@@ -287,11 +288,19 @@ bool Plugin::load(color_ostream &con)
287288 return false ;
288289 }
289290 const char ** plug_version =(const char ** ) LookupPlugin (plug, " plugin_version" );
291+ const int *plugin_abi_version = (int *) LookupPlugin (plug, " plugin_abi_version" );
290292 const char ** plug_git_desc_ptr = (const char **) LookupPlugin (plug, " plugin_git_description" );
291293 Plugin **plug_self = (Plugin**)LookupPlugin (plug, " plugin_self" );
292294 const char *dfhack_version = Version::dfhack_version ();
293295 const char *dfhack_git_desc = Version::git_description ();
294296 const char *plug_git_desc = plug_git_desc_ptr ? *plug_git_desc_ptr : " unknown" ;
297+ if (*plugin_abi_version != Version::dfhack_abi_version ())
298+ {
299+ con.printerr (" Plugin %s: ABI version mismatch (Plugin: %i, DFHack: %i)\n " ,
300+ *plug_name, *plugin_abi_version, Version::dfhack_abi_version ());
301+ plugin_abort_load;
302+ return false ;
303+ }
295304 if (strcmp (dfhack_version, *plug_version) != 0 )
296305 {
297306 con.printerr (" Plugin %s was not built for this version of DFHack.\n "
0 commit comments