There is a define called SQLITE_EXTRA_INIT. Make this the name of some code to run that does an sqlite3_auto_extension to add the extensions that you want to load in each connection. eg: Append the following to the SQLITE3.C file: /* ** This extension automatically sets the busy_timeout to 5 seconds when loaded ** ** It should be initialized with coreinit.c or other autoextension mechanism */ #ifdef __cplusplus extern "C" { #endif #ifndef SQLITE_PRIVATE #define SQLITE_PRIVATE static #endif #ifdef SQLITE_CORE #include "sqlite3.h" #else #ifdef _HAVE_SQLITE_CONFIG_H #include "config.h" #endif #include "sqlite3ext.h" SQLITE_EXTENSION_INIT1 #endif #ifdef _WIN32 #ifndef SQLITE_CORE __declspec(dllexport) #endif #endif #ifdef SQLITE_CORE static #endif int sqlite3_autobusy_init(sqlite3 *db, char **pzErrMsg, const sqlite3_api_routines *pApi) { SQLITE_EXTENSION_INIT2(pApi); return sqlite3_busy_timeout(db, 5000); } #ifdef __cplusplus } #endif which are the extension function(s), and then add code like the following after that: int core_init(const char* dummy) { int nErr = 0; nErr += sqlite3_auto_extension((void*)sqlite3_autobusy_init); return nErr ? SQLITE_ERROR : SQLITE_OK; } Then compile the newly generated SQLITE3.C that you have created with -DSQLITE_EXTRA_INIT=core_init and, of course, -DSQLITE_CORE=1 Viola! Now, every connection will have all the extensions loaded into it. I add about 30-odd extensions into SQLite this way so that they are always compiled in and always loaded. You can even generate a shared library containing the added functions, and you only need to expose the standard sqlite3_* entry points, the extension entry points are local symbols only. -- ˙uʍop-ǝpısdn sı ɹoʇıuoɯ ɹnoʎ 'sıɥʇ pɐǝɹ uɐɔ noʎ ɟı > -----Original Message----- > From: sqlite-users [mailto:sqlite-users-boun...@mailinglists.sqlite.org] > On Behalf Of David Burgess > Sent: Monday, 12 June, 2017 18:57 > To: SQLite mailing list > Subject: Re: [sqlite] Is sqlite3_auto_extension() same compilation unit > ruled out? > > Have a look at the way readfile() and writefile() is implemented in the > sqlite interpreter. > > On Tue, Jun 13, 2017 at 10:38 AM, petern < > <mailto:peter.nichvolo...@gmail.com> peter.nichvolo...@gmail.com> > wrote: > > > I have a situation where it would be convenient to locate externally > > loadable SQLite extension code in the same compilation unit as the > server > > code. Is there a way for server main() to load those extensions located > > within its own compilation unit? Does the necessity of #including both > > sqlite3.h and sqlite3ext.h with SQLITE_EXTENSION_INIT1 macro rule this > out? > > > > Documentation suggests sqlite3_auto_extension() loads a statically > linked > > extension entrypoint but trying this on same compilation unit's > > sqlite3_extension_init() entrypoint results in segfault. > > > > FYI, environment is Linux. > > _______________________________________________ > > sqlite-users mailing list > > <mailto:sqlite-users@mailinglists.sqlite.org> > > sqlite-users@mailinglists.sqlite.org > > <http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users> > > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > > > _______________________________________________ > sqlite-users mailing list > <mailto:sqlite-users@mailinglists.sqlite.org> > sqlite-users@mailinglists.sqlite.org > <http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users> > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users