【问题标题】:How do I build lsqlite3 for lua.5.3.1如何为 lua.5.3.1 构建 lsqlite3
【发布时间】:2017-03-26 23:50:29
【问题描述】:

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

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

【问题讨论】:

    标签: sqlite lua cl


    【解决方案1】:

    首先。它附带了 sqilte 源本身。 但是 luarocks 有 2 个模块。一个需要单独的 SQLite 库。 还有一个在单个文件中构建 sqlite 和 lsqlite。所以它没有外部部门。 另外我认为 lsqlite3 在 Windwos 上有错误。它提供对sqlite3_temp_directory 的访问。但这没有在宿主应用程序应该定义它的 Windows 上定义。所以 lsqlite 只是尝试使用 ifdef 来忽略它。但它测试了未在 MS 编译器上定义的 WIN32 宏。所以你有两种方法。 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)
    

    【讨论】:

    • 好吧,我设法通过命令手动执行此操作,因为 luarocks 一直尝试使用 lua5.1.dll 而不是 lua51.lib。现在我需要看看它是否适用于 lua 5.3.1,因为我的构建没有构建 .lib 文件,并且不能 100% 确定如何做到这一点。
    • 您可以尝试我的github.com/moteus/lua-windows-environment 设置,它具有预构建的 sqlite 库。 Lua-Sqlite3 也可以毫无问题地安装在 Windows 上。
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 2021-08-05
    • 2012-09-13
    • 2013-05-14
    • 2012-08-06
    相关资源
    最近更新 更多