如何在 Windows 上集成 LuaJIT 和 LuaRocks?
Posted
技术标签:
【中文标题】如何在 Windows 上集成 LuaJIT 和 LuaRocks?【英文标题】:How to integrate LuaJIT with LuaRocks on Windows? 【发布时间】:2014-11-09 10:42:02 【问题描述】:我下载了 LuaJIT 的源代码并用 msvc120.dll (VS 2013 x64) 编译它。当我从命令行运行它时,执行一些基本的 lua 没有问题。现在 LuaJIT 安装指南提到将 luajit.exe 和 lua51.dll 移动到它们自己的文件夹中。从那里它说要创建一个 lua 文件夹,并在该文件夹下创建一个包含 src/jit 内容的 jit 文件夹移动到新创建的 jit 文件夹下。
据我了解,我的文件夹应如下所示并包含:
luajit.exe lua51.dll /lua /jit bc.lua [其余的 jit 文件] vmdef.lua这是正确的还是我缺少文件?
现在,在我构建了我的 luajit 之后,我尝试将它连接到我的 luarocks 中,以使用
充当我的解释器install.bat /LUA C:\LuaJIT\2.0.3\[folder with above content]
但是这找不到头文件。然后我将头文件复制到上面的文件夹中并将其连接起来,但是当指向 LuaJIT 时,我实际上永远无法编译任何东西。 编辑:我得到的错误如下,
C:\LuaJIT\2.0.3\bin\lua51.dll:致命错误 LNK1107:无效或损坏的文件:无法在 0x2D0 读取 错误:安装依赖项失败:https://rocks.moonscript.org/luafilesystem-1.6.2-2.src.rock - 构建错误:编译模块 lfs.dll 失败处理这个问题的正确方法是简单地指向我的 lua 二进制文件并从那里利用 LuaJIT 来运行我的文件,还是我在连接 LuaJIT 和 luarocks 时做错了什么?前者似乎在大多数情况下都有效,因为我只遇到了一个库编译问题,lua-cjson。
【问题讨论】:
当你说“当指向 LuaJIT 时,我永远无法编译任何东西”是什么意思?究竟会发生什么? @EtanReisner 我用错误消息更新了问题。 【参考方案1】:我遇到了完全相同的问题,但他们在这里找到了解决方案:
https://github.com/keplerproject/luafilesystem/issues/22
我知道“静态链接 DLL”有一个所谓的“导出”.lib 文件,该文件被传递给链接器(而不是 DLL 本身)。
因此,例如,在编译时,LuaRocks 是这样做的:
cl /nologo /MD /O2 -c -Fosrc/mime.obj -ID:/LuaJIT-2.0.4/include/ src/mime.c -DLUA_COMPAT_APIINTCASTS -DLUASOCKET_DEBUG -DNDEBUG -DLUASOCKET_API=__declspec(dllexport) -DMIME_API=__declspec(dllexport) mime.c
link -dll -def:core.def -out:mime/core.dll D:/LuaJIT-2.0.4/bin/lua51.dll src/mime.obj
我的 LuaJIT 是从 D:\LuaJIT-2.0.4\src
中的源代码编译的,但我自己创建了两个文件夹:D:\LuaJIT-2.0.4\include
和从 src
复制的所有 *.h
文件和 D:\LuaJIT-2.0.4\bin
和 luajit.exe
、lua51.dll
,然后后来lua51.exp
和lua51.lib
。仍然是同样的错误,但这是正确的轨道。
修复
现在,检查你的 LuaRocks 配置在哪里:
luarocks.bat help
向下滚动到如下部分:
CONFIGURATION
Lua version: 5.1
Configuration files:
System: D:/luarocks/config-5.1.lua (ok)
User : (... snip ...)
编辑系统配置文件,具体见部分:
variables =
MSVCRT = 'VCRUNTIME140',
LUALIB = 'lua51.dll'
这里! LUALIB
应该是 .lib
文件。如果您的导出库在 DLL 旁边,您只需更改为:
variables =
MSVCRT = 'VCRUNTIME140',
LUALIB = 'lua51.lib' -- here!
验证
现在:
luarocks.bat install luasocket
(...)
link -dll -def:core.def -out:socket/core.dll D:/LuaJIT-2.0.4/bin/lua51.lib src/luasocket.obj (...)
(...)
luasocket 3.0rc1-2 is now built and installed in D:\luarocks\systree (license: MIT)
注意传递给链接器的第一个参数。
【讨论】:
以上是关于如何在 Windows 上集成 LuaJIT 和 LuaRocks?的主要内容,如果未能解决你的问题,请参考以下文章
Clear Case 在win7 64bit 上集成windows explore 右键菜单