如何在sqlite中使用carray可加载扩展

时间:2017-02-25 23:54:58

标签: sqlite

我正在尝试在sqlite3 shell中使用 carray 可加载扩展名但我收到了可怕的消息:Error: %1 is not a valid Win32 application.我不知道这是否是sqlite问题或其他问题。我已经阅读了官方文档和几个相关的SO问题(例如here),但根据这些资源,出现我已经做好了一切。

我已经使用MSVC成功下载了carray源代码和compiled。这里显示了编译选项,包括“\ src”中sqlite3ext.hsqlite3.h的路径:

cl carray.c /I..\src /link /dll /out:carray.dll

这会生成:carray.dllcarray.objcarray.libcarray.exp

随着sqlite3 shell在与编译代码相同的目录中启动,我得到以下错误 - 尝试几种不同的方式来加载编译的扩展:

C:\SQLite\src\ext>sqlite3
SQLite version 3.16.2 2017-01-06 16:32:41
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.

sqlite> .load carray                           ----- Try without the extension.
Error: %1 is not a valid Win32 application.

sqlite> .load carray.dll                       ----- Oh, I should use the extension.
Error: The specified module could not be found.

sqlite> .load ./carray                         ----- OK...maybe? Nope.
Error: %1 is not a valid Win32 application.

sqlite> SELECT load_extension('./carray.dll'); ----- Time to ask SO.
Error: The specified module could not be found.

我尝试使用不同的选项重新编译以指定系统架构,但我得到了相同的错误。任何提示?

系统详细信息:SQLite 3.16.2,Windows 10 64位,MS Visual Studio 14(2015)

1 个答案:

答案 0 :(得分:0)

我尝试像你一样用carray编译cl carray.c /I..\src /link /dll /out:carray.dll。而且.load carray对我没有任何问题。

我正在使用从http://sqlite.org/download.html下载的命令行工具(sqlite3.exe是一个32位应用程序。)

也许您正在使用cl用于x64和32位版本的sqlite3.exe?尝试使用“用于VS2015的Develoepr命令提示符”而不是“VS2015 x64 Native Tools命令提示符”。因此,where cl会打印...\bin\cl.exe而非...\bin\amd64\cl.exe的内容。