gpt4 book ai didi

c - 如何从 C 程序调用 Lua 脚本?

转载 作者:行者123 更新时间:2023-12-05 01:27:22 25 4
gpt4 key购买 nike

我有 2 个 lua 脚本。一个需要另一个。那么如何从 C 程序中调用它呢?

例如:

主程序

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;
}

它抛出一个运行时错误:

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'



我认为是因为foo.lua没有加载到lua虚拟机中,但是我找不到像加载文件或do文件这样的API。所以我该怎么做?

最佳答案

它工作正常,您的 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 程序代码。

关于c - 如何从 C 程序调用 Lua 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55062121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com