代码之家  ›  专栏  ›  技术社区  ›  user1511417

将Luac字节码嵌入C/C++源文件中

  •  0
  • user1511417  · 技术社区  · 6 年前

    如何将一个LUA字节码字符串包含到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 在运行时。你甚至不用解释 卢卡 在运行时,对吗?

    更新:

    对这个问题的前两个注释有助于生成ByTySnpe,以便可以将其包含在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 ,因为

    此函数使用lua_load将块加载到以零结尾的字符串s中。

    注:有 零点 作为数据 test .

    0 回复  |  直到 6 年前
        1
  •  2
  •   lhf    6 年前

    使用 luaL_loadbuffer 而不是 luaL_loadstring :

    luaL_loadbuffer(L,test,test_len,"");