編集: これは、共有ライブラリ、d ランタイム、および os x のより一般的な問題にまで追跡されています。こちらをご覧ください: OS X での D ランタイムの初期化
Lua スタンドアロン インタープリターからアクセスできる単純な d 関数を取得しようとしています。
Luaインスタンスに広告ライブラリを認識させるためのすぐに明白な方法が見つからなかったので、このハックを試しました
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 を呼び出すと、seg fault が発生します。
私はこれを完全に間違った方法で見ていますか?
編集:私は os x で lua 5.1.5 を使用しており、.so の代わりに .dylib をロードできるようにするために、package.cpath に「;?.dylib」を追加しました。
edit2: 少し絞り込みました。luaopen_luad_test で new を使用すると、segfault が発生します。