如何为lua.5.3.1构建lsqlite3

时间:2016-11-13 03:09:11

标签: sqlite lua cl

我希望在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中包含哪些..

关于如何正确执行此操作的任何建议?

1 个答案:

答案 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)