将 luac 字节码嵌入到 C/C++ 源文件中
Embed luac-bytecode into C/C++ source-file
如何将 lua-bytecode-string 包含到 C/C++ 文件中?
$ luac -o test -s test.lua
$ cat test
LuaS�
xV(w@@A@$@&�printTestj
现在,如果您可以将这个字节串插入到 C/C++ 文件中,您实际上可以
luaL_loadfile(lua, bytestring.c_str());
这使得无需在 运行 时加载 test.lua
。您甚至不必在 运行 时解释 test.lua
,对吧?
更新:
这个问题的前两条评论有助于生成字节串,以便您可以将其包含在 C/C++ 代码中。
From this answer 我有了这个想法:
xxd -i test > test.h
创建这个:
unsigned char test[] = {
0x1b, 0x4c, 0x75, 0x61, 0x53, 0x00, 0x19, 0x93, 0x0d, 0x0a, 0x1a, 0x0a,
0x04, 0x08, 0x04, 0x08, 0x08, 0x78, 0x56, 0x00, /* ... */, 0x00};
unsigned int test_len = 105;
这很好,但是不能与luaL_loadstring一起使用,因为
This function uses lua_load to load the chunk in the zero-terminated string s.
注意:test
.
中有zeros个数据
使用luaL_loadbuffer instead of luaL_loadstring:
luaL_loadbuffer(L,test,test_len,"");
如何将 lua-bytecode-string 包含到 C/C++ 文件中?
$ luac -o test -s test.lua
$ cat test
LuaS�
xV(w@@A@$@&�printTestj
现在,如果您可以将这个字节串插入到 C/C++ 文件中,您实际上可以
luaL_loadfile(lua, bytestring.c_str());
这使得无需在 运行 时加载 test.lua
。您甚至不必在 运行 时解释 test.lua
,对吧?
更新:
这个问题的前两条评论有助于生成字节串,以便您可以将其包含在 C/C++ 代码中。 From this answer 我有了这个想法:
xxd -i test > test.h
创建这个:
unsigned char test[] = {
0x1b, 0x4c, 0x75, 0x61, 0x53, 0x00, 0x19, 0x93, 0x0d, 0x0a, 0x1a, 0x0a,
0x04, 0x08, 0x04, 0x08, 0x08, 0x78, 0x56, 0x00, /* ... */, 0x00};
unsigned int test_len = 105;
这很好,但是不能与luaL_loadstring一起使用,因为
This function uses lua_load to load the chunk in the zero-terminated string s.
注意:test
.
使用luaL_loadbuffer instead of luaL_loadstring:
luaL_loadbuffer(L,test,test_len,"");