参照这两篇教程编译tolua
https://zhuanlan.zhihu.com/p/81935911
https://github.com/NewbieGameCoder/tolua_runtime/wiki
从mingw的shell执行build_xx.sh时报错。
$ /h/Lua/tolua_runtime-1.0.8.584/build_win64.sh
/h/Lua/tolua_runtime-1.0.8.584/build_win64.sh: 第 5 行:cd: luajit-2.1: No such file or directory
mingw32-make: *** No rule to make target 'clean'. Stop.
mingw32-make: *** No targets specified and no makefile found. Stop.
cp: 无法获取"src/libluajit.a" 的文件状态(stat): No such file or directory
mingw32-make: *** No rule to make target 'clean'. Stop.
gcc.exe: error: tolua.c: No such file or directory
gcc.exe: error: int64.c: No such file or directory
gcc.exe: error: uint64.c: No such file or directory
gcc.exe: error: pb.c: No such file or directory
gcc.exe: error: lpeg.c: No such file or directory
gcc.exe: error: struct.c: No such file or directory
gcc.exe: error: cjson/strbuf.c: No such file or directory
gcc.exe: error: cjson/lua_cjson.c: No such file or directory
gcc.exe: error: cjson/fpconv.c: No such file or directory
gcc.exe: error: luasocket/auxiliar.c: No such file or directory
gcc.exe: error: luasocket/buffer.c: No such file or directory
gcc.exe: error: luasocket/except.c: No such file or directory
gcc.exe: error: luasocket/inet.c: No such file or directory
gcc.exe: error: luasocket/io.c: No such file or directory
gcc.exe: error: luasocket/luasocket.c: No such file or directory
gcc.exe: error: luasocket/mime.c: No such file or directory
gcc.exe: error: luasocket/options.c: No such file or directory
gcc.exe: error: luasocket/select.c: No such file or directory
gcc.exe: error: luasocket/tcp.c: No such file or directory
gcc.exe: error: luasocket/timeout.c: No such file or directory
gcc.exe: error: luasocket/udp.c: No such file or directory
gcc.exe: error: luasocket/wsocket.c: No such file or directory
gcc.exe: error: window/x86_64/libluajit.a: No such file or directory
这个是因为mingw找不到tolua相关的路径,不知道是教程少写了步骤,还是我对教程的理解有误,反正最后自己瞎捣鼓出来了。
解决方法:
- 先打开cmd,cd到mingw安装路径
-- cmd:
> cd xxx/msys64
- cmd启动mingw的shell,以64位为例
-- cmd:
> mingw64_shell.bat
- mingw的shell里cd到tolua源码路径
-- shell:
$ cd x:/xxx/tolua_runtime-1.0.8.584
- mingw的shell里执行对应平台的build,这里注意shell里执行文件时和cmd里的命令不一样,需要文件前加上"./"
-- shell:
$ ./build_win64.sh
编译成功,生成的dll在 tolua源码路径/Plugins/对应平台/ 下。
$ ./build_win64.sh
H:/Lua/msys64/mingw64/bin/mingw32-make -C src clean
mingw32-make[1]: Entering directory 'H:/Lua/tolua_runtime-1.0.8.584/luajit-2.1/src'
rm -f luajit.exe libluajit.a lua51.dll host/minilua.exe host/buildvm.exe lj_vm.S lj_bcdef.h lj_ffdef.h lj_libdef.h lj_recdef.h lj_folddef.h host/buildvm_arch.h jit/vmdef .lua *.o host/*.o *.obj *.lib *.exp *.dll *.exe *.manifest *.pdb *.ilk
mingw32-make[1]: Leaving directory 'H:/Lua/tolua_runtime-1.0.8.584/luajit-2.1/src'
==== Building LuaJIT 2.1.0-beta3 ====
H:/Lua/msys64/mingw64/bin/mingw32-make -C src
mingw32-make[1]: Entering directory 'H:/Lua/tolua_runtime-1.0.8.584/luajit-2.1/src'
HOSTCC host/minilua.o
HOSTLINK host/minilua.exe
DYNASM host/buildvm_arch.h
HOSTCC host/buildvm.o
HOSTCC host/buildvm_asm.o
HOSTCC host/buildvm_peobj.o
HOSTCC host/buildvm_lib.o
HOSTCC host/buildvm_fold.o
HOSTLINK host/buildvm.exe
BUILDVM lj_vm.o
CC lj_gc.o
BUILDVM lj_ffdef.h
CC lj_err.o
CC lj_char.o
BUILDVM lj_bcdef.h
CC lj_bc.o
CC lj_obj.o
CC lj_buf.o
CC lj_str.o
CC lj_tab.o
CC lj_func.o
CC lj_udata.o
CC lj_meta.o
CC lj_debug.o
CC lj_state.o
CC lj_dispatch.o
CC lj_vmevent.o
CC lj_vmmath.o
CC lj_strscan.o
CC lj_strfmt.o
CC lj_strfmt_num.o
CC lj_api.o
CC lj_profile.o
CC lj_lex.o
CC lj_parse.o
CC lj_bcread.o
CC lj_bcwrite.o
CC lj_load.o
CC lj_ir.o
CC lj_opt_mem.o
BUILDVM lj_folddef.h
CC lj_opt_fold.o
CC lj_opt_narrow.o
CC lj_opt_dce.o
CC lj_opt_loop.o
CC lj_opt_split.o
CC lj_opt_sink.o
CC lj_mcode.o
CC lj_snap.o
CC lj_record.o
CC lj_crecord.o
BUILDVM lj_recdef.h
CC lj_ffrecord.o
CC lj_asm.o
CC lj_trace.o
CC lj_gdbjit.o
CC lj_ctype.o
CC lj_cdata.o
CC lj_cconv.o
CC lj_ccall.o
CC lj_ccallback.o
CC lj_carith.o
CC lj_clib.o
CC lj_cparse.o
CC lj_lib.o
CC lj_alloc.o
lj_alloc.c:176:14: warning: 'DIRECT_MMAP' defined but not used [-Wunused-function]
static void *DIRECT_MMAP(size_t size)
^
CC lib_aux.o
BUILDVM lj_libdef.h
CC lib_base.o
CC lib_math.o
CC lib_bit.o
CC lib_string.o
CC lib_table.o
CC lib_io.o
CC lib_os.o
CC lib_package.o
CC lib_debug.o
CC lib_jit.o
CC lib_ffi.o
CC lib_init.o
AR libluajit.a
CC luajit.o
BUILDVM jit/vmdef.lua
LINK luajit.exe
OK Successfully built LuaJIT
mingw32-make[1]: Leaving directory 'H:/Lua/tolua_runtime-1.0.8.584/luajit-2.1/src'
==== Successfully built LuaJIT 2.1.0-beta3 ====
H:/Lua/msys64/mingw64/bin/mingw32-make -C src clean
mingw32-make[1]: Entering directory 'H:/Lua/tolua_runtime-1.0.8.584/luajit-2.1/src'
rm -f luajit.exe libluajit.a lua51.dll host/minilua.exe host/buildvm.exe lj_vm.S lj_bcdef.h lj_ffdef.h lj_libdef.h lj_recdef.h lj_folddef.h host/buildvm_arch.h jit/vmdef.lua *.o host/*.o *.obj *.lib *.exp *.dll *.exe *.manifest *.pdb *.ilk
mingw32-make[1]: Leaving directory 'H:/Lua/tolua_runtime-1.0.8.584/luajit-2.1/src'