[英]How can I call Lua scripts from a C program?
I have 2 lua scripts. 我有2个lua脚本。 One require another one.
一个需要另一个。 So how can I call it from a C program?
那么如何从C程序中调用它呢?
For example: 例如:
main.lua main.lua
local foo = require "foo"
function main()
foo.bar()
end
main()
foo.lua foo.lua
function bar( )
io.write("hello, world!\n")
end
And this is my C program: 这是我的C程序:
#include <lauxlib.h>
#include <lua.h>
#include <lualib.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
int status, result;
lua_State *L;
L = luaL_newstate();
luaL_openlibs(L);
status = luaL_loadfile(L, "main.lua");
if (status) {
fprintf(stderr, "Couldn't load file: %s\n", lua_tostring(L, -1));
exit(1);
}
result = lua_pcall(L, 0, LUA_MULTRET, 0);
if (result) {
fprintf(stderr, "Failed to run script: %s\n", lua_tostring(L, -1));
exit(1);
}
lua_close(L);
return 0;
}
It throws a runtime error: 它会引发运行时错误:
Failed to run script: main.lua:130: module 'foo' not found: no field package.preload['foo'] no file '/usr/local/share/lua/5.3/foo.lua' no file '/usr/local/share/lua/5.3/foo/init.lua' no file '/usr/local/lib/lua/5.3/foo.lua' no file '/usr/local/lib/lua/5.3/foo/init.lua' no file './foo.lua' no file './foo/init.lua' no file '/usr/local/lib/lua/5.3/foo.so' no file '/usr/local/lib/lua/5.3/loadall.so' no file './foo.so'
无法运行脚本:main.lua:130:找不到模块'foo':没有字段package.preload ['foo']没有文件'/usr/local/share/lua/5.3/foo.lua'no file'/ usr / local / share / lua / 5.3 / foo / init.lua'no file'/usr/local/lib/lua/5.3/foo.lua'no file'/usr/local/lib/lua/5.3/foo/ init.lua'no file'./foo.lua'no file'./foo/init.lua'no file'/usr/local/lib/lua/5.3/foo.so'no file'/ usr / local / lib / lua / 5.3 / loadall.so'没有文件'./foo.so'
I think it is because foo.lua is not loaded into the lua virtual machine, but I can't find API like load files or do files. 我认为这是因为foo.lua没有加载到lua虚拟机中,但我找不到像加载文件或文件这样的API。 So what should I do?
所以我该怎么做?
It works fine, your foo.lua
is wrong, change it to: 它工作正常,你的
foo.lua
是错误的,改为:
local foo = {}
function foo.bar()
io.write("Hello World!\n")
end
return foo
and it works: 它有效:
$ ls
foo.lua luabr.c main.lua
BladeMight ~/lua/tests/605
$ gcc luabr.c -llua && ./a
Hello World!
** luabr.c is your C program code. ** luabr.c是您的C程序代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.