我正在尝试在sqlite3 shell中使用 carray 可加载扩展名但我收到了可怕的消息:Error: %1 is not a valid Win32 application.
我不知道这是否是sqlite问题或其他问题。我已经阅读了官方文档和几个相关的SO问题(例如here),但根据这些资源,出现我已经做好了一切。
我已经使用MSVC成功下载了carray源代码和compiled。这里显示了编译选项,包括“\ src”中sqlite3ext.h
和sqlite3.h
的路径:
cl carray.c /I..\src /link /dll /out:carray.dll
这会生成:carray.dll
,carray.obj
,carray.lib
和carray.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)
答案 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
的内容。