将Lua嵌入到C++中

MFH*_*MFH 6 c++ lua cross-platform

我想编写一个C++ - 可以在执行期间交互/调用Lua脚本的程序.该程序的一个关键概念是完全平台独立性,但我似乎无法找到实际提供某些东西的Lua-build.

到目前为止我发现的Lua-builds要么基于环境变量,要么基于特定的库.lib,.dll或者.so.来自lua.org的官方Lua-source 也不是我正在寻找的,因为它定义了一个主要功能......

是否有一个简单的 - 最好的情况是像sqlite-amalgamation - 用于C/C++的Lua-interpreter,它没有任何这些依赖项?

Chr*_*cke 7

lua.c包含main并定义控制台应用程序的入口点.如果你从项目中删除它,那么如果你愿意的话,将构建内容留给独立的lib或动态库,就好了.


Ber*_*ann 5

以下是我用作项目起点的内容(前不久我发现了类似的内容并对其进行了调整,以便可以更快地进行更改):


lua脚本文件:

    -- Start
    -- Script: myscript.lua
    print("this is lua")
    -- End
Run Code Online (Sandbox Code Playgroud)

C文件:

    #include <stdlib.h>
    #include <stdio.h>
    #include <lua.h>
    #include <lauxlib.h>
    #include <lualib.h>

    int main(void) {
            static const luaL_reg lualibs[] = {
                    { "base",       luaopen_base },
                    { NULL,         NULL }
            };

            static void openlualibs(lua_State *l) {
                    const luaL_reg *lib;

                    for (lib = lualibs; lib->func != NULL; lib++) {
                            lib->func(l);
                            lua_settop(l, 0);
                    }
            }

            lua_State *l;
            l = lua_open();
            openlualibs(l);

            printf("now calling lua\n\n");
            lua_dofile(l, "myscript.lua");
            printf("\ndo something else\n\n");

            lua_close(l);
            return 0;
    }
Run Code Online (Sandbox Code Playgroud)

您可以自由地将其用作项目的基础。