3

我正在尝试在 Windows 上安装最新版本的 LuaJIT。我尽可能按照安装 LuaJIT 的说明进行操作。我安装了 cygwin 和make软件包,打开 cygwin,cd编辑到解压缩的源文件夹,然后输入make. 我得到这个输出:

$ make
==== Building LuaJIT 2.0.3 ====
make -C src
make[1]: Entering directory '/cygdrive/c/Users/Daniel/Downloads/LuaJIT-2.0.3/LuaJIT-2.0.3/src'
CC        lj_alloc.o
lj_alloc.c:249:2: error: #error "NYI: need an equivalent of MAP_32BIT for this 64 bit OS"
 #error "NYI: need an equivalent of MAP_32BIT for this 64 bit OS"
  ^
lj_alloc.c: In function ‘direct_alloc’:
lj_alloc.c:742:5: warning: implicit declaration of function ‘CALL_MMAP’ [-Wimplicit-function-declaration]
     char *mm = (char *)(DIRECT_MMAP(mmsize));
     ^
lj_alloc.c:742:16: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
     char *mm = (char *)(DIRECT_MMAP(mmsize));
                ^
lj_alloc.c: In function ‘alloc_sys’:
lj_alloc.c:911:18: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
       char *mp = (char *)(CALL_MMAP(rsize));
                  ^
lj_alloc.c: In function ‘lj_alloc_create’:
lj_alloc.c:1143:11: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
   tbase = (char *)(CALL_MMAP(tsize));
           ^
Makefile:647: recipe for target 'lj_alloc.o' failed
make[1]: *** [lj_alloc.o] Error 1
make[1]: Leaving directory '/cygdrive/c/Users/Daniel/Downloads/LuaJIT-2.0.3/LuaJIT-2.0.3/src'
Makefile:103: recipe for target 'default' failed
make: *** [default] Error 2

搜索这些错误消息中的任何一个都没有结果。我做错什么了?

4

2 回答 2

3

如果您阅读文档,您会发现 cygwin64 尚不支持,仅支持 32 位。 http://luajit.org/install.html

但是,添加对它的支持看起来并不难。你试一试。例如,文档建议:

配置 LuaJIT

标准配置应该适用于大多数安装。通常不需要调整设置。以下文件包含所有用户可配置的设置:

src/luaconf.h设置一些配置变量。

Makefile具有安装 LuaJIT 的设置(仅限 POSIX)。

src/Makefile具有在 POSIX、MinGW 或 Cygwin 下编译 LuaJIT 的设置。

src/msvcbuild.bat具有使用 MSVC 或 WinSDK 编译 LuaJIT 的设置。

在更改任何设置之前,请阅读这些文件中的说明。


所以修复 src/Makefile 似乎是最简单的。不幸的是,我现在有点不舒服,现在不能这样做。我看了一点,这个补丁修复了 CALL_MMAP 问题: --- src/lj_alloc.c~ 2014-03-23 20:47:09.000000000 -0500 +++ src/lj_alloc.c 2014-03-23 20:47:54.145877000 -0500 @@ -188,7 +188,7 @@ return ptr; }

-#elif LJ_TARGET_OSX || LJ_TARGET_PS4 || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__sun__)
+#elif LJ_TARGET_OSX || LJ_TARGET_PS4 || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__sun__) || defined(__CYGWIN__)

 /* OSX and FreeBSD mmap() use a naive first-fit linear search.
 ** That's perfect for us. Except that -pagezero_size must be set for OSX,

添加一个 __CYGWIN__ 检查。

现在只是 lj_err_unwind_win64 unwinder 没有链接。这是给迈克·帕尔的。不确定 EXT 或 INT 是否合适以及如何链接。

于 2014-03-24T01:33:52.563 回答
2

值得一提的是:LuaJIT-2.1.0-beta2(现在可在 luajit.org 下载)在 Cygwin 64 上构建良好;无需黑客攻击。

于 2016-05-02T23:33:19.790 回答