我有2个lua脚本。一个需要另一个。那么如何从C程序中调用它呢?
例如:
main.lua
local foo = require "foo"
function main()
foo.bar()
end
main()
foo.lua
function bar( )
io.write("hello, world!\n")
end
这是我的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;
}
它会引发运行时错误:
无法运行脚本:main.lua:130:找不到模块'foo':无字段 package.preload ['foo']否文件'/usr/local/share/lua/5.3/foo.lua'否 文件'/usr/local/share/lua/5.3/foo/init.lua'没有文件 '/usr/local/lib/lua/5.3/foo.lua'没有文件 '/usr/local/lib/lua/5.3/foo/init.lua'没有文件'./foo.lua'没有文件 './foo/init.lua'无文件'/usr/local/lib/lua/5.3/foo.so'无文件 '/usr/local/lib/lua/5.3/loadall.so'没有文件'./foo.so'
我认为这是因为foo.lua没有加载到lua虚拟机中,但是我找不到加载文件或做文件之类的API。那我该怎么办?
答案 0 :(得分:2)
工作正常,您的foo.lua
错误,将其更改为:
local foo = {}
function foo.bar()
io.write("Hello World!\n")
end
return foo
它有效:
$ ls
foo.lua luabr.c main.lua
BladeMight ~/lua/tests/605
$ gcc luabr.c -llua && ./a
Hello World!
** luabr.c 是您的C程序代码。