When uploading Luajit
(for example, v2.0.4
) from Windows
to Linux
, you may get the following compile error:
In file included from lj_ffrecord.c:859:0:
lj_recdef.h:224:1: error: ‘recff_rawlen’ undeclared here (not in a function)
recff_rawlen,
^
Makefile:645: recipe for target 'lj_ffrecord.o' failed
The root cause is in src/host/buildvm_lib.c
:
void emit_lib(BuildCtx *ctx)
{
......
int ok = 1;
if (!strcmp(buf, "#if LJ_52\n"))
ok = LJ_52;
else if (!strcmp(buf, "#if LJ_HASJIT\n"))
ok = LJ_HASJIT;
else if (!strcmp(buf, "#if LJ_HASFFI\n"))
ok = LJ_HASFFI;
......
}
Because in Windows
, the EOL(End-of-Line
) should be “\r\n
“, so the !strcmp(buf, "#if LJ_52\n")
will return false (!strcmp(buf, "#if LJ_52\r\n")
will return true). The modify method is using the dos2unix
tool to convert the whole folder:
# cd LuaJIT-2.0.4
# find . -type f -print0 | xargs -0 dos2unix
Then compile will be OK.
Reference:
(1) The EOL difference in Windows and UNIX may generate compile error;
(2) How can I run dos2unix on an entire directory?.
Thanks a lot @nanxiao. I was not able to run “find . -type f -print0 | xargs -0 dos2unix” but I edited buildvm_lib.c and put “\r\n” on the code and it works as charm.