无法在cygwin中编译LuaJIT

4

我正在尝试在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 functionCALL_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

搜索任何这些错误信息都没有结果。我做错了什么?

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 遇到了未链接的情况。这是为 Mike Pall 准备的。不确定 EXT 还是 INT 更适合以及如何链接。


4
有更新吗?也就是说,我们如何使得 lj_err_unwind_win64 可以链接起来?我按照您建议的更正后运行 make 仍然会出现以下错误:DYNLINK cyglua51.dll lj_vm.o:(.xdata+0x10):对 lj_err_unwind_win64' 的引用未定义 lj_vm.o:(.xdata+0x10): 对于未定义符号 lj_err_unwind_win64' 进行的重定位被截断了 collect2: error: ld returned 1 exit status Makefile:678: 目标 'cyglua51.dll' 失败 - Glenn Strycker

2

就这个问题而言:LuaJIT-2.1.0-beta2(现在可以在luajit.org下载)可以在Cygwin 64上很好地构建,无需进行任何修改。


欢迎来到Stack Overflow!虽然这理论上可以回答问题,但最好在此处包含答案的基本部分,并提供参考链接。 - Enamul Hassan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接