You could define redefine SQLITE_EXTENSION_INIT1 after the first include. The reason that these work when appended to the sqlite3.c (the amalgamation) is that it (sqlite3.c) has the symbol SQLITE_CORE defined which indicates that the sqlite3 API is to be called directly rather than via the "global array of indirect pointers" created by the SQLITE_EXTENSION_INIT1 macro (and initialized by the SQLITE_EXTENSION_INIT2 macro) Since you can only declare a global once, you can only execute the SQLITE3_EXTENSION_INIT1 macro once per compilation unit. ``` #include "eval.c" #undef SQLITE_EXTENSION_INIT1 #define SQLITE_EXTENSION_INIT1 /* no-op */ #include "carray.c" ... etc ... ```