如何在 Windows 上使用 LuaRocks 安装 lua-zlib?

Posted

技术标签:

【中文标题】如何在 Windows 上使用 LuaRocks 安装 lua-zlib?【英文标题】:How to install lua-zlib with LuaRocks on Windows? 【发布时间】:2020-05-25 04:12:43 【问题描述】:

我在 Linux 环境中用 Lua 编写了一个程序,它使用 Lua 模块 ZipWriter 及其依赖项(lua-zlibstruct)。我也在尝试发布到 Windows,但在构建 lua-zlib 时遇到问题。

我正在使用 LuaRocks 通过标准命令安装所有其他软件包。所以,要安装lua-zlib,我只使用了> luarocks install lua-zlib,但它当然不起作用,因为zlib 本身没有安装,而lua-zlib 是对该库的绑定。

Installing https://luarocks.org/lua-zlib-1.2-0.src.rock

Error: Could not find header file for ZLIB
  No file zlib.h in c:/external/include
  No file zlib.h in c:/mingw/include
  No file zlib.h in c:/windows/system32/include
You may have to install ZLIB in your system and/or pass ZLIB_DIR or ZLIB_INCDIR to the luarocks command.
Example: luarocks install lua-zlib ZLIB_DIR=/usr/local

所以,我在该页面中找到了 a link,用于 Windows 的不同 zlib 下载。我下载了“Complete package, except sources”和“Sources”安装程序,安装它们,他们在C:\Program Files (x86)\GnuWin32目录下创建了文件夹和文件,都与zlib相关。我按照该错误日志提供的示例并尝试再次运行luarocks

> luarocks install lua-zlib ZLIB_DIR="C:\Program Files (x86)\GnuWin32"

但又是一个错误:

Installing https://luarocks.org/lua-zlib-1.2-0.src.rock

mingw32-gcc -O2 -c -o lua_zlib.o -IC:\lua\luajit lua_zlib.c -DLZLIB_COMPAT -IC:\Program Files (x86)\GnuWin32/include
mingw32-gcc -shared -o zlib.dll lua_zlib.o -lC:\Program Files (x86)\GnuWin32/zlib C:\lua\luajit/lua51.dll -lMSVCRT
c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: cannot find -lC:\Program Files (x86)\GnuWin32/zlib
collect2.exe: error: ld returned 1 exit status

Error: Build error: Failed compiling module zlib.dll

确实,C:\Program Files (x86)\GnuWin32/zlib 中没有文件/目录,如错误所示。由于某种原因,它没有安装。我错过了什么?

注意:如错误日志所示,我有mingw32-gcc 作为编译器,以防万一这有用。

【问题讨论】:

【参考方案1】:

它应该使用静态 zlib 代替。为此,您可以在 Github 上关注此 guide。基本上,你需要

    已安装功能性 zlib 库 从 https://zlib.net 下载,使用 cmake 生成 Visual Studio 解决方案(例如在 c:\lib\zlib 中)

    cmake .. -DCMAKE_INSTALL_PREFIX=c:\lib\zlib
    

    然后使用 VS 中的“Release”构建类型从生成的解决方案构建 INSTALL 项目。

    下载luarock lua-zlib:

    mkdir c:\lib\lua-zlib
    c:
    cd \lib\lua-zlib
    luarocks download lua-zlib
    

    编辑您的 lua-zlib*.rockspec 文件(例如在 c:\lib\lua-zlib 中), 添加,"ZLIB_STATIC"build.modules.zlib.defines, 将 platform.windows.modules.zlib.libraries"$(ZLIB_LIBDIR)/zlib" 更改 给"$(ZLIB_LIBDIR)/zlibstatic"

    从本地源安装 luarock(更改文件名以匹配现有文件名):

    cd c:\lib\lua-zlib 
    luarocks install lua-zlib*.rockspec
    

【讨论】:

感谢您指点该指南!实际上,在使用 VS 构建之后,要使用 luarocks install lua-zlib 进行构建,我只需将 C:\lib\zlib\lib\zlib.lib 复制到 C:\lib\zlib\zlib.lib,就可以了。 一个重要的更正,使用静态库确实是必要的。我现在实际上所做的是将C:\lib\zlib\lib\zlibstatic.lib 复制到C:\lib\zlib\zlib.lib。这是它使用静态库的方式,但您不必编辑rockspec

以上是关于如何在 Windows 上使用 LuaRocks 安装 lua-zlib?的主要内容,如果未能解决你的问题,请参考以下文章

我无法在 Windows 10 上设置 luarocks

无法在 Windows 上从 LuaRocks 安装 LuaSocket

如何在 Windows 上集成 LuaJIT 和 LuaRocks?

Windows Luarocks 安装权限错误

Lua 5.4.0/LuaRocks 安装

如何为 Windows 10 安装 luarocks