4

编辑:这已被追踪到共享库、d 运行时和 os x 的一个更普遍的问题。请参阅此处:在 OS X 上初始化 D 运行时

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

我看不到让 lua 实例识别广告库的直接明显方法,所以我尝试了这个 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,我在 package.cpath 中添加了 ";?.dylib" 以允许加载 .dylib 而不是 .so

编辑2:我缩小了一点。在 luaopen_luad_test 中任何使用 new 都会导致段错误。

4

2 回答 2

2

您必须初始化 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-22T11:21:00.597 回答
2

一种可能是您尚未设置 D 运行时并且 GC 未处于有效状态。

我从来没有使用过 luad (或没有提供主要功能的 D ),所以我可能会离开基地。

于 2012-06-21T19:06:17.447 回答