将Lua嵌入到C++中。

我想编写一个C++程序,在执行过程中可以与Lua脚本互动/调用。程序的一个关键概念是完全独立于平台,但是我似乎无法找到一个Lua构建实际上提供了这样的东西。

我找到的Lua构建要么基于环境变量,要么基于特定库,如".lib"、".dll"或".so"。官方Lua源自lua.org,也不符合我的要求,因为它定义了一个main函数...

是否有一个简单的 - 最好是像sqlite-amalgamation一样的东西 - 用于C/C++的Lua解释器,没有这些依赖项?

原文链接 https://stackoverflow.com/questions/5127226

点赞
stackoverflow用户27491
stackoverflow用户27491

lua.c 包含了 main 函数并且定义了控制台应用程序的入口。如果你将它从工程中移除,剩下的可以很好地构建为一个独立的库,或者如果你更喜欢的话,一个动态库。

2011-02-26 13:45:24
stackoverflow用户618598
stackoverflow用户618598

以下是我在项目中使用的起点(我一段时间以前找到了类似的东西并进行了调整,以便更快地进行更改):


Lua脚本文件:

    -- 开始
    -- 脚本:myscript.lua
    print("this is lua")
    -- 结束

C文件:

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

    int main(char argv[], int argc) {
            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;
    }

你可以自由地将它作为你的项目基础。

2011-02-26 13:57:44
stackoverflow用户68204
stackoverflow用户68204

针对 Lua 核心和独立解释器的单一文件综合构建,请参阅官方源代码套件中的文件 etc/all.c。您可以将其作为自己综合构建的基础,可能是通过消除最后一行对 lua.c 的引用来完成。

许多嵌入 Lua 的较大应用程序只需将核心源文件添加到项目中即可。如果应用程序打算不允许扩展代码从 .dll.so 文件加载编译模块,这种方法特别有效。 如果应用程序允许编译模块,则通常最好链接到核心的共享库,以便应用程序和已加载的模块可以引用核心库的单个实例中的符号。请注意,意外包含多个 Lua 核心实例几乎肯定会产生非常难以诊断的症状。

2011-02-26 21:59:26