Luad使用独立的Lua

时间:2012-06-21 10:33:33

标签: lua d lua-api

编辑:这已被追溯到共享库,d运行时和os x的更普遍的问题。见这里:Initializing the D runtime on OS X

我正在尝试从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。但是,当我打电话要求时,我只得到一个段故障。

我是否完全以错误的方式看待这个?

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

edit2:我把它缩小了一点。在luaopen_luad_test中使用new会导致段错误。

2 个答案:

答案 0 :(得分:2)

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

我从来没有使用过luad(如果没有它提供主要功能的话,那么我可能会离开基地。

答案 1 :(得分: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