我想编写一个C ++ - 可以在执行期间交互/调用Lua脚本的程序。该程序的一个关键概念是完全平台独立性,但我似乎无法找到实际提供某些东西的Lua-build。
我到目前为止发现的Lua-builds要么基于环境变量,要么基于.lib
,.dll
或.so
等特定库。来自lua.org的官方Lua-source也不是我想要的,因为它定义了一个主函数...
是否有一个简单的 - 最好的情况是像sqlite-amalgamation - 用于C / C ++的Lua-interpreter,它没有任何这些依赖项?
答案 0 :(得分:7)
lua.c包含main并定义控制台应用程序的入口点。如果你从项目中删除它,那么如果你愿意的话,将构建版本留给独立的库或动态库,就好了。
答案 1 :(得分:4)
以下是我用作项目起点的内容(我发现类似的东西一段时间后调整它以便我可以更快地改变它):
lua脚本文件:
-- Start
-- Script: myscript.lua
print("this is lua")
-- End
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;
}
您可以自由地使用它作为项目的基础。
答案 2 :(得分:3)
对于Lua核心和独立解释器的单文件合并版本,请参阅官方源代码包中的文件etc/all.c
。您当然可以将它作为自己合并的基础,也许可以通过删除最后一行lua.c
的引用。
许多嵌入Lua的大型应用程序只需将核心源文件添加到项目中即可。如果应用程序不允许扩展代码从.dll
或.so
文件加载已编译的模块,则此方法尤其有效。如果您的应用程序将允许编译模块,那么通常最好链接核心的共享库,以便应用程序和加载的模块可以引用来自核心库的单个实例的符号。请注意,意外包含多个Lua核心实例几乎可以保证很难诊断症状。