能否从 C 中调用 require 函数

我有一个编译为共享对象的模块(我遵循了此文章中的库部分 [ https://chsasank.github.io/lua-c-wrapping.html ] ) ,我想从 C 而不是解释器中加载它。

这可能吗?如果可以,如何做到?

点赞
用户5675002
用户5675002

是的,这是可能的,因为require是存储在全局环境中的函数。当Lua需要处理-l选项时,独立解释器也是这样做的,参见dolibrary函数。

你可以像处理任何其他全局函数一样实现这个功能 - 在最简单的情况下,调用lua_getglobal(),然后将需要require的文件的名称推入栈中,最后调用lua_calllua_pcall或其他函数。

2019-01-21 20:27:44
用户8449645
用户8449645

很不幸,我正在使用 Lua 5.1,但 "dolibrary" 函数不存在,我试图取部分代码,但它崩溃了:\ 现在,我使用 luaL_dostring(L,"require 'libMyWrappings'"); libMyWrappings 必须与 C 程序位于同一目录中,我不能使用路径来指示该库。- Aminos 1月22日11:45

我也遇到了同样的问题,这与包库的加载有关 {LUA_LOADLIBNAME, luaopen_package} 必须在试图调用它之前发生。

2019-07-18 12:47:28
用户11017983
用户11017983

我知道我有点晚了,但是有可能有其他人现在正在闹这个问题(就像我刚刚做的那样)。

这是一种从 C 中执行 "require" 的简单方法:

int reqRes = luaL_dostring(L, "local t=require('myLib') return (t~=nil)");
if (reqRes==0)
  //成功
else
  //失败
2021-09-21 09:46:14