【发布时间】:2019-07-30 10:07:05
【问题描述】:
我有 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 虚拟机中,但是我找不到像 load files 或 do files 这样的 API。那我该怎么办?
【问题讨论】: