官方文档指出:
SQLITE_OMIT_AUTOINIT
为了向后兼容缺少 sqlite3_initialize() 接口的旧版本 SQLite,在进入某些关键接口(如 sqlite3_open()、sqlite3_vfs_register() 和 sqlite3_mprintf())时会自动调用 sqlite3_initialize() 接口。通过使用 SQLITE_OMIT_AUTOINIT C 预处理器宏构建 SQLite,可以省略以这种方式自动调用 sqlite3_initialize() 的开销。使用 SQLITE_OMIT_AUTOINIT 构建时,SQLite 不会自动初始化,应用程序需要在开始使用 SQLite 库之前直接调用 sqlite3_initialize()。
所以:
- 默认情况下,此条件未定义;
- 如果你确定它
sqlite3_initialize()被调用,你可以定义它;
- 运行与否不会花费任何性能
sqlite3_initialize(),因为初始化检查将在“进入某些关键接口时”执行,即在打开数据库时。
即使sqlite3_initialize()没有被调用也一切正常的事实清楚地表明了这一点。
在我们的SQLite3包装器(允许静态或外部链接)中,我们启用此条件,因为我们显式调用sqlite3_initialize(). 但是在官方的dll中,并没有定义这个条件。