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

如何使用C闭包预编译和转储Lua二进制文件?

  •  1
  • jiandingzhe  · 技术社区  · 10 月前

    目前我有一个Lua驱动的系统,连接了C函数。当它从源代码构建时,它的构造如下:

    // bind C functions to make them callable inside Lua code
    lua_pushlightuserdata(lua, some_cxx_object);
    lua_pushcclosure(lua, global_function_foo, 1);
    lua_setglobal(lua, "foo");
    
    lua_pushcclosure(lua, global_function_bar, 0);
    lua_setglobal(lua, "bar");
    
    ...... many more bindings ......
    
    // compile Lua source code
    auto re = luaL_loadbufferx( guts->lua, source, source_len, nullptr, nullptr );
    if (re != LUA_OK)
        raise_exceptions();
    
    // use the prepared Lua system
    ......
    

    现在我想使用预编译的二进制文件来提高系统初始化速度。我的问题是:如何 lua_dump 使用那些C闭包全局变量?明确地:

    • 当我要编译&;dump,我应该在编译之前绑定C函数吗?
    • 当我要使用预编译的二进制文件时,在加载二进制文件之前,我需要再次绑定C函数吗?
    1 回复  |  直到 10 月前
        1
  •  2
  •   shingo    10 月前

    当我要编译&;dump,我应该在编译之前绑定C函数吗?

    不,就像你可以运行luac来编译一个lua脚本一样。

    当我要使用预编译的二进制文件时,在加载二进制文件之前,我需要再次绑定C函数吗?

    是的,但不是在加载之前,而是在运行之前,所以唯一的区别是可以节省编译时间。