WoL*_*lus 35 c++ lua bytecode store compilation
我正在尝试编译一个调用一些导出函数的lua脚本,将生成的字节码保存到文件然后加载此字节码并执行它,但我还没有找到任何关于如何执行此操作的示例.有没有关于如何做到这一点的例子?我怎样才能做到这一点?
编辑:我正在使用Lua + Luabind(C++)
Nic*_*las 57
这一切都很简单.
首先,加载Lua脚本而不执行它.如果你已经将Lua状态与导出的函数连接起来并不重要; 你正在做的就是编译脚本文件.
您可以使用luaL_loadfile
,它使用C标准库函数从磁盘读取文件并将其加载到lua_State
.或者,您可以自己将文件加载到字符串中并使用luaL_loadstring
它将其加载到lua_State
.
根据文档,lua_load
这两个函数都会发出返回值和编译器错误.
如果编译成功,则lua_State
现在将编译的Lua块作为堆栈顶部的Lua函数.要获取已编译的二进制文件,必须使用该lua_dump
函数.它相当复杂,因为它使用回调接口传递数据.请参阅有关详细信息的文档.
在该过程之后,您具有已编译的Lua字节代码.将其推入您选择的文件中.请记住:将其写为二进制文件,而不是文本翻译.
当需要加载字节代码时,您需要做的就是...... 正是您之前所做的.好吧,差不多.Lua具有启发式检测,它给出的"字符串"是Lua源字符串或字节代码.所以是的,您可以luaL_loadfile
像以前一样加载字节代码.
不同之处在于您不能使用luaL_loadstring
字节代码.该函数需要一个以NULL结尾的字符串,这很糟糕.字节代码可以在其中嵌入NULL字符,这会搞砸一切.所以如果你想自己做文件IO(因为你使用的是特殊的文件系统或其他东西),你必须lua_load
直接使用.其中也使用了类似的回调接口lua_dump
.所以请阅读如何使用它.
归档时间: |
|
查看次数: |
21760 次 |
最近记录: |