我希望在Windows 10上为lua 5.3.1构建lsqlite3 0.9.4 但是我不完全确定如何去做 有一个rockspec文件,但我不确定我是否应该尝试通过它(因为默认情况下我认为luarocks配置为5.1)或手动使用Visual Studio Developer控制台。 遗憾的是,我对自己应该做的事情知之甚少 从我的猜测谷歌搜索/试错这里是我所做的,我不知道这是否正确,所以原谅我。
cl /nologo /MD /O2 -c -Folsqlite3.obj -I"C:/Lua/5.3.1/include" lsqlite3.c -Dluaopen_lsqlite3=luaopen_lsqlite3complete
(基本上当luarocks无法工作时从luarocks获得此命令)
然后我这样做了:
LINK.EXE /DLL /OUT:lsqlite3.dll lsqlite3.obj
这给了我一堆未解决的外部sqlite3符号错误,我有点期待,我只是不确定在sqlite3中包含哪些..
关于如何正确执行此操作的任何建议?
答案 0 :(得分:0)
首先。它随附sqilte sourece。
但是luarocks有2个模块。一个需要单独的SQLite库。
并在单个文件中构建sqlite和lsqlite。所以它没有外部代表。
另外我认为lsqlite3在Windwos上有bug。它提供对sqlite3_temp_directory
的访问权限。但是这在主机应用程序应该定义它的Windows上没有定义。所以lsqlite只是尝试使用ifdef来忽略它。但是它测试了WIN32
宏,它没有在MS编译器上定义。所以你有2种方法。
1.编辑rockspec / make文件并定义WIN32
2.编辑来源并使用_WIN32
代替
这是LuaRocks make命令
的输出d:\tmp\lsqlite3_fsl09x>luarocks make lsqlite3-0.9.4-0.rockspec
cl /nologo /MD /O2 -c -Folsqlite3.obj -Ic:\luarocks\x86\5.1\include\ lsqlite3.c -DLSQLITE_VERSION="0.9.4" -Dluaopen_lsqlite3=luaopen_lsqlite3complete lsqlite3.c
cl /nologo /MD /O2 -c -Fosqlite3.obj -Ic:\luarocks\x86\5.1\include\ sqlite3.c -DLSQLITE_VERSION="0.9.4" -Dluaopen_lsqlite3=luaopen_lsqlite3complete sqlite3.c
link -dll -def:lsqlite3complete.def -out:lsqlite3complete.dll c:\luarocks\x86\5.1\lib\lua51.lib lsqlite3.obj sqlite3.obj
Microsoft (R) Incremental Linker Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.
Creating library lsqlite3complete.lib and object lsqlite3complete.exp
cl /nologo /MD /O2 -c -Folsqlite3.obj -Ic:\luarocks\x86\5.1\include\ lsqlite3.c -DLSQLITE_VERSION="0.9.4" -Ic:/luarocks/x86/external/include
lsqlite3.c
link -dll -def:lsqlite3.def -out:lsqlite3.dll c:\luarocks\x86\5.1\lib\/lua51.lib lsqlite3.obj -libpath:c:/luarocks/x86/external/lib sqlite3.lib
Microsoft (R) Incremental Linker Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.
Creating library lsqlite3.lib and object lsqlite3.exp
lsqlite3 0.9.4-0 is now installed in c:\luarocks\x86\5.1\systree (license: MIT/X11)
但是如果你没有单独的SQLite libray,你只需要删除一个模块,然后只使用一个(也可以重命名模块)。
build = {
type = "builtin",
modules = {
lsqlite3 = {
sources = { "lsqlite3.c", "sqlite3.c" },
defines = {'LSQLITE_VERSION="0.9.4"'}
}
},
copy_directories = { 'doc', 'examples' }
}
这是LuaRocks make命令的输出
d:\tmp\lsqlite3_fsl09x>luarocks make lsqlite3-0.9.4-0.rockspec
cl /nologo /MD /O2 -c -Folsqlite3.obj -Ic:\luarocks\x86\5.1\include\ lsqlite3.c -DLSQLITE_VERSION="0.9.4" lsqlite3.c
cl /nologo /MD /O2 -c -Fosqlite3.obj -Ic:\luarocks\x86\5.1\include\ sqlite3.c -DLSQLITE_VERSION="0.9.4" sqlite3.c
link -dll -def:lsqlite3.def -out:lsqlite3.dll c:\luarocks\x86\5.1\lib\/lua51.lib lsqlite3.obj sqlite3.obj
Microsoft (R) Incremental Linker Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.
Creating library lsqlite3.lib and object lsqlite3.exp
lsqlite3 0.9.4-0 is now installed in c:\luarocks\x86\5.1\systree (license: MIT/X11)