使用独立的Lua来编写Luad。

我试图从 Lua 独立解释器中访问一个简单的 d 函数。

我无法立即想到让 lua 实例识别 d 库的方法,因此我尝试了这个 hack:

import luad.all, luad.c.all;

extern (C) int luaopen_luad_test(lua_State* L) {
    auto lua = new LuaState(L);
    lua["addition"] = &addition;
    return(0);
}

int addition(int a, int b)
{
    return(a+b);
}

我知道当我调用 require("luad_test") 时,它会调用 luaopen_luad_test(lua_State* L),从而让我访问解释器的 lua_State。然而,当我调用 require 时,我只会得到一个分段错误。

我完全搞错了吗?

编辑:我在 os x 上使用的是 lua 5.1.5,我已经将“;?.dylib”添加到 package.cpath 中,以便允许加载 .dylib 而不是 .so

编辑2:我已经将问题缩小了一些。在 luaopen_luad_test 中使用 new 会导致分段错误。

点赞
用户1343
用户1343

一种可能性是您尚未设置 D 运行时环境,GC 不处于有效状态。

我从未使用过 luad(或没有提供主功能的 D),因此可能有所偏差。

2012-06-21 19:06:17
用户876497
用户876497

你需要初始化D运行库。试试以下代码:

import luad.all, luad.c.all;

extern (C) int luaopen_luad_test(lua_State* L) {
  Runtime.initialize();
  static __gshared LuaState lua = new LuaState(L);
  lua["addition"] = &addition;
  return(0);
} // luaopen_luad_test() C function

int addition(int a, int b) {
  return(a+b);
} // addition() function
2012-06-22 11:21:00