0

我希望在 Windows 10 上为 lua 5.3.1 构建 lsqlite3 0.9.4。
但是我不完全确定如何去做。
有一个 rockspec 文件,但我不确定是否应该尝试通过它(因为默认情况下我认为 luarocks 配置为 5.1)或手动使用 Visual Studio 开发人员控制台。
不幸的是,我对我应该做什么没有太多的了解。
根据我的猜测,谷歌搜索/反复试验是我所做的,我不知道这是否正确,所以请原谅我。

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 中包含的位置..

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

4

1 回答 1

0

第一的。它附带了 sqilte 源本身。但是 luarocks 有 2 个模块。一个需要单独的 SQLite 库。还有一个在单个文件中构建 sqlite 和 lsqlite。所以它没有外部部门。另外我认为 lsqlite3 在 Windwos 上有错误。它提供对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-13T07:20:39.660 回答