在沙盒环境中加载非标准的lua库(Lua 5.1/Luajit)

我正在学习lua,并且为此我正在尝试使用编程游戏berrybots(http://berrybots.com/)。它使用C++引擎,用户/玩家可以提供lua脚本来编程他们自己的“机器人AI”以与其他机器人作战。

我正在编写自己的机器人,但我想使用一些更多的数字密集型的想法,所以我需要在沙盒用户脚本中导入/需要外部数字库(我猜测是numlua,https://github.com/carvalho/numlua)。 我不介意修改berrybots的原始代码来使它工作,并且我已经假设在沙盒中没有办法绕过它(但也许有吗?)。

在C++端,使用以下代码启动沙盒并加载标准库:

*state = luaL_newstate();
lua_setcwd(*state, stateCwd);
luaL_openlibs(*state)

我想加载numlua库,这通常可以在任何lua脚本中导入:

require "numlua"

但在沙盒中不能这样做。

我知道luaL_register用于注册C函数,但我无法使其工作,我认为应该有一种更简单的方法来导入numlua而不必回到numlua的C API。

我不介意解决方案存在安全风险,因为我只打算自己使用它。 为了完整起见,最好有一个(相当)安全的解决方案。

我是lua新手(主要熟悉Python / Cython / C),如果我忽略了一些明显的东西,请原谅我。

点赞