如何为lua.5.3.1构建lsqlite3

我想在Windows 10上为lua 5.3.1构建lsqlite3 0.9.4。

然而,我不确定该如何进行。

有一个rockspec文件,但我不确定是否应该尝试通过它来完成(因为默认情况下我认为luarocks已配置为5.1),还是要手动使用Visual Studio开发人员控制台。

我不幸地缺乏什么应该做的知识。

通过猜测googling/试验,这是我所做的,但我不知道是否正确,请原谅我。

cl /nologo /MD /O2 -c -Folsqlite3.obj -I"C:/Lua/5.3.1/include" lsqlite3.c -Dluaopen_lsqlite3=luaopen_lsqlite3complete

(基本上是从luarocks得到这个命令,当它未能工作时)

然后我做了这个:

LINK.EXE /DLL /OUT:lsqlite3.dll lsqlite3.obj

这给了我一堆未解决的外部sqlite3符号错误,这我有点期待,我只是不知道在哪里包括sqlite3..

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

点赞
用户2328287
用户2328287

将下面翻译成中文并且保留原本的 markdown 格式

首先,在SQLite源代码中,它本身就包含了SQLite库。而luarocks中有两个模块。其中一个需要单独下载SQLite库,而另一个能够在单个文件中同时构建sqlite和lsqlite。因此,它不需要外部依赖。此外,我认为在Windows下,lsqlite3存在缺陷。它提供了访问sqlite3_temp_directory 的权限,但在Windows中这个没被定义过,因此主机应用程序应该定义这个。所以,lsqlite只是试着用ifdef来忽略这个问题。但是它测试的WIN32宏并没有在MS编译器中定义。所以你有两种选择:

  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库,你只需从rockspec文件中删除一个模块,然后只使用一个(并且还要重命名模块)。

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)
2016-11-13 07:20:39