由于能力和理解有限,如有错误请理解谢谢。
1.lj_vm_cpcall方法在哪
花了一天时间阅读了luajit一部分源码,读到这个方法lj_vm_cpcall时发现并没有实现,编译后在lj_vm.S文件里了解到这个方法最后是用机器码处理的。下面是生成后的一段代码。
.private_extern _lj_vm_cpcall
.no_dead_strip _lj_vm_cpcall
_lj_vm_cpcall:
.byte 85,83,65,87,65,86,72,131,236,40,137,253,137,124,36,24
.byte 137,108,36,28,68,139,125,36,68,43,125,24,68,139,117,8
.byte 199,68,36,20,0,0,0,0,68,137,124,36,16,65,129,198
.byte 40,12,0,0,76,139,125,48,76,137,124,36,32,72,137,101
.byte 48,65,137,174,208,244,255,255,255,209,133,192,15,132,144,253
.byte 255,255,137,193,187,5,0,0,0,233,90,255,255,255
2.luajit vm怎么实现的
最后了解到luajit vm 是用汇编语言写的,各个平台用的不同汇编文件例如vm_arm.dasc,vm_arm64.dasc等
3.怎么在windows生成可以编译出32、64位bytecode字节码文件?
以vs2015为例
打开一个vs x86控制台窗口然后执行以下命令
cd LuaJIT-2.1.0-beta3/src
msvcbuild.bat
这样会生成一个luajit.exe这个是可以生成32位字节码文件的程序
打开一个vs x64控制台窗口然后执行以下命令
cd LuaJIT-2.1.0-beta3/src
msvcbuild.bat gc64
加入参数gc64这样就可以生成64位字节码的luajit.exe
4.怎么在macosx生成可以编译出32、64位bytecode字节码文件的可执行程序?
打开终端
cd LuaJIT-2.1.0-beta3
make clean
make CC="gcc -m64 -arch x86_64"
这样会生成一个luajit这个是可以生成32位字节码文件的程序
cd LuaJIT-2.1.0-beta3
make clean
make CC="gcc -m64 -arch x86_64 -DLUAJIT_ENABLE_GC64"
加入-DLUAJIT_ENABLE_GC64这样才可以生成64位字节码程序
5.怎么生成bytecode文件
把LuaJIT-2.1.0-beta3/jit目录放入可执行程序的同级目录
然后cd 到这个目录然后执行
macosx
./luajit -b input.lua ouput.luac
windows
luajit.exe -b input.lua ouput.luac
提示:ios编译luajit源码现在在xcode没办法用system这个方法了 所以可以去掉这个方法修改成 加入一个宏
-DLJ_NO_SYSTEM=1 这样编译就不会去处理了