Dll sqlite3扩展函数:找不到指定的模块

Dll sqlite3扩展函数:找不到指定的模块,dll,sqlite,Dll,Sqlite,我正在尝试加载扩展函数sqlite3扩展。可以在底部找到C文件 我正在运行win10并使用VS2015。我已将32位和64位版本编译为.dll(没有错误),并尝试使用sqlite3 shell加载它们,但出现了相同的错误。(分别使用32位和64位版本的sqlite3.dll文件)。下面我尝试使用32位sqlite加载扩展 sqlite> select load_extension('C:\sqlite\ext32.dll'); Error: The specified procedure

我正在尝试加载
扩展函数
sqlite3扩展。可以在底部找到C文件

我正在运行win10并使用VS2015。我已将32位和64位版本编译为.dll(没有错误),并尝试使用sqlite3 shell加载它们,但出现了相同的错误。(分别使用32位和64位版本的sqlite3.dll文件)。下面我尝试使用32位sqlite加载扩展

sqlite> select load_extension('C:\sqlite\ext32.dll');
Error: The specified procedure could not be found.
sqlite> select load_extension('C:\sqlite\ext64.dll');
Error: The specified module could not be found.

我使用此命令编译32位
cl扩展函数.c-link-dll-out:ext32.dll
。然后,我运行了64位版本的
vcvvarsall x64
并运行了
cl扩展函数.c-link-dll-out:ext64.dll

扩展函数.c
不导出任何函数(也称为“过程”),因此,输出dll非常无用

SQLite shell需要一个名为
sqlite3\u extension\u init
的函数,如SQLite文档一章所述

因此,您只需像这样修改
扩展函数.c
(第1837行左右)

之前:

#ifdef COMPILE_SQLITE_EXTENSIONS_AS_LOADABLE_MODULE
int sqlite3_extension_init(
    sqlite3 *db, char **pzErrMsg, const sqlite3_api_routines *pApi){
  SQLITE_EXTENSION_INIT2(pApi);
  RegisterExtensionFunctions(db);
  return 0;
}
#endif /* COMPILE_SQLITE_EXTENSIONS_AS_LOADABLE_MODULE */
之后:

#ifdef COMPILE_SQLITE_EXTENSIONS_AS_LOADABLE_MODULE
#ifdef _WIN32
__declspec(dllexport)
#endif
int sqlite3_extension_init(
    sqlite3 *db, char **pzErrMsg, const sqlite3_api_routines *pApi){
  SQLITE_EXTENSION_INIT2(pApi);
  RegisterExtensionFunctions(db);
  return 0;
}
#endif /* COMPILE_SQLITE_EXTENSIONS_AS_LOADABLE_MODULE */

别接分机了?由于没有给出路径,请确保它位于sqlite3 shell的工作目录中。。。我还更新了我的帖子,以显示64位和32位之间的错误差异,并确保dll位于路径中。文档中指出,“出于安全原因,默认情况下已关闭加载的扩展,并且必须通过事先调用
sqlite3\u enable\u load\u extension()
”来启用。也就是说,您应该重建sqlite3程序以允许可加载的扩展。
请注意,命令行shell程序已经为您启用了扩展加载(通过调用sqlite3_enable_load_extension()接口作为其设置的一部分),因此上面的命令可以在没有任何特殊开关、设置或其他复杂性的情况下工作。
Ok,这确实是使用
cl
修复的,谢谢。实际上,通过安装mingw并使用gcc编译,我已经让它正常工作了<代码>gcc
正确导出函数,无需进行任何上述修改<代码>gcc
版本的运行速度也稍快一些。