无法在 Windows 上从 LuaRocks 安装 LuaSocket

Posted

技术标签:

【中文标题】无法在 Windows 上从 LuaRocks 安装 LuaSocket【英文标题】:Not able to install LuaSocket from LuaRocks on Windows 【发布时间】:2021-08-11 00:05:47 【问题描述】:

我在 Windows 上安装了 LuaRocks 旧版软件包,其中包括 Lua 5.1。但是当我运行luarocks install luasocket 时,我得到以下输出:

Installing https://luarocks.org/luasocket-3.0rc1-2.src.rock

luasocket 3.0rc1-2 depends on lua >= 5.1 (5.1-1 provided by VM)
mingw32-gcc -O2 -c -o src/mime.o -IC:\Program Files (x86)\LuaRocks\include src/mime.c -DLUA_COMPAT_APIINTCASTS -DLUASOCKET_DEBUG -DLUASOCKET_INET_PTON -DWINVER=0x0501 -DLUASOCKET_API=__declspec(dllexport) -DMIME_API=__declspec(dllexport)
mingw32-gcc -shared -o mime/core.dll src/mime.o C:\Program Files (x86)\LuaRocks/lua5.1.dll -lMSVCR80
mingw32-gcc -O2 -c -o src/luasocket.o -IC:\Program Files (x86)\LuaRocks\include src/luasocket.c -DLUA_COMPAT_APIINTCASTS -DLUASOCKET_DEBUG -DLUASOCKET_INET_PTON -DWINVER=0x0501 -DLUASOCKET_API=__declspec(dllexport) -DMIME_API=__declspec(dllexport) -Ic:/mingw/include
mingw32-gcc -O2 -c -o src/timeout.o -IC:\Program Files (x86)\LuaRocks\include src/timeout.c -DLUA_COMPAT_APIINTCASTS -DLUASOCKET_DEBUG -DLUASOCKET_INET_PTON -DWINVER=0x0501 -DLUASOCKET_API=__declspec(dllexport) -DMIME_API=__declspec(dllexport) -Ic:/mingw/include
mingw32-gcc -O2 -c -o src/buffer.o -IC:\Program Files (x86)\LuaRocks\include src/buffer.c -DLUA_COMPAT_APIINTCASTS -DLUASOCKET_DEBUG -DLUASOCKET_INET_PTON -DWINVER=0x0501 -DLUASOCKET_API=__declspec(dllexport) -DMIME_API=__declspec(dllexport) -Ic:/mingw/include
mingw32-gcc -O2 -c -o src/io.o -IC:\Program Files (x86)\LuaRocks\include src/io.c -DLUA_COMPAT_APIINTCASTS -DLUASOCKET_DEBUG -DLUASOCKET_INET_PTON -DWINVER=0x0501 -DLUASOCKET_API=__declspec(dllexport) -DMIME_API=__declspec(dllexport) -Ic:/mingw/include
mingw32-gcc -O2 -c -o src/auxiliar.o -IC:\Program Files (x86)\LuaRocks\include src/auxiliar.c -DLUA_COMPAT_APIINTCASTS -DLUASOCKET_DEBUG -DLUASOCKET_INET_PTON -DWINVER=0x0501 -DLUASOCKET_API=__declspec(dllexport) -DMIME_API=__declspec(dllexport) -Ic:/mingw/include
mingw32-gcc -O2 -c -o src/options.o -IC:\Program Files (x86)\LuaRocks\include src/options.c -DLUA_COMPAT_APIINTCASTS -DLUASOCKET_DEBUG -DLUASOCKET_INET_PTON -DWINVER=0x0501 -DLUASOCKET_API=__declspec(dllexport) -DMIME_API=__declspec(dllexport) -Ic:/mingw/include
mingw32-gcc -O2 -c -o src/inet.o -IC:\Program Files (x86)\LuaRocks\include src/inet.c -DLUA_COMPAT_APIINTCASTS -DLUASOCKET_DEBUG -DLUASOCKET_INET_PTON -DWINVER=0x0501 -DLUASOCKET_API=__declspec(dllexport) -DMIME_API=__declspec(dllexport) -Ic:/mingw/include
mingw32-gcc -O2 -c -o src/except.o -IC:\Program Files (x86)\LuaRocks\include src/except.c -DLUA_COMPAT_APIINTCASTS -DLUASOCKET_DEBUG -DLUASOCKET_INET_PTON -DWINVER=0x0501 -DLUASOCKET_API=__declspec(dllexport) -DMIME_API=__declspec(dllexport) -Ic:/mingw/include
mingw32-gcc -O2 -c -o src/select.o -IC:\Program Files (x86)\LuaRocks\include src/select.c -DLUA_COMPAT_APIINTCASTS -DLUASOCKET_DEBUG -DLUASOCKET_INET_PTON -DWINVER=0x0501 -DLUASOCKET_API=__declspec(dllexport) -DMIME_API=__declspec(dllexport) -Ic:/mingw/include
mingw32-gcc -O2 -c -o src/tcp.o -IC:\Program Files (x86)\LuaRocks\include src/tcp.c -DLUA_COMPAT_APIINTCASTS -DLUASOCKET_DEBUG -DLUASOCKET_INET_PTON -DWINVER=0x0501 -DLUASOCKET_API=__declspec(dllexport) -DMIME_API=__declspec(dllexport) -Ic:/mingw/include
mingw32-gcc -O2 -c -o src/udp.o -IC:\Program Files (x86)\LuaRocks\include src/udp.c -DLUA_COMPAT_APIINTCASTS -DLUASOCKET_DEBUG -DLUASOCKET_INET_PTON -DWINVER=0x0501 -DLUASOCKET_API=__declspec(dllexport) -DMIME_API=__declspec(dllexport) -Ic:/mingw/include
mingw32-gcc -O2 -c -o src/wsocket.o -IC:\Program Files (x86)\LuaRocks\include src/wsocket.c -DLUA_COMPAT_APIINTCASTS -DLUASOCKET_DEBUG -DLUASOCKET_INET_PTON -DWINVER=0x0501 -DLUASOCKET_API=__declspec(dllexport) -DMIME_API=__declspec(dllexport) -Ic:/mingw/include
In file included from src/wsocket.h:11:0,
                 from src/socket.h:18,
                 from src/wsocket.c:10:
src/wsocket.c: In function 'socket_gaistrerror':
src/wsocket.c:417:14: error: 'ERROR_NOT_ENOUGH_MEMORY' undeclared (first use in this function)
         case EAI_MEMORY: return "memory allocation failure";
              ^
src/wsocket.c:417:14: note: each undeclared identifier is reported only once for each function it appears in

Error: Build error: Failed compiling object src/wsocket.o

安装 LuaSocket 应该怎么做?

【问题讨论】:

-IC:\Program Files (x86)\LuaRocks\include 应该改为 -I"C:\Program Files (x86)\LuaRocks\include" @EgorSkriptunoff 我的路径中有C:\Program Files (x86)\LuaRocks,我应该改变什么 - 你能告诉我吗? @EgorSkriptunoff 它在 MinGW 4.8.1 上为我成功编译,它具有相同的奇怪 -IC:\Program Files (x86)\LuaRocks\include 格式 gist.github.com/Ketho/68a26dc4fcb438b928c5a4b1aa36aa45 @Ketho - 您的日志中没有包含空格的路径。 @EgorSkriptunoff 它适用于 MinGW 4.8.1,即使路径包含空格 gist.github.com/Ketho/94673506f888ae358ce42a28c4c24157 【参考方案1】:

有一张票,他们建议使用 Mingw-w64 和 x86_64 作为架构,使用 sj_lj 作为异常模型。但它似乎没有得到解决。 https://github.com/diegonehab/luasocket/issues/241

【讨论】:

以上是关于无法在 Windows 上从 LuaRocks 安装 LuaSocket的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Windows 10 安装 luarocks

LuaRocks 找不到 luarocks.lua

一个使用 xmake 构建 c/c++ 模块的 luarocks 插件

在 Windows 10 上设置 luarocks

无法在 Windows 上从 Python 连接到 MSSQL Server

Windows Luarocks 安装权限错误