2013年7月11日木曜日

Luaの標準ライブラリのロード方法

今まで一部で躓いていたCからのLuaステートへの標準ライブラリのロードがうまくいったのでアウトプット。

以下はうまくいかないコード。
#include

int main( void ) {
    lua_State *L = luaL_newstate();
    luaopen_package( L );
    lua_close( L );
    return 0;
}

出力:
PANIC: unprotected error in call to Lua API (no calling environment)

以下が正しいコード。
#include

int main( void ) {
    lua_State *L = luaL_newstate();
    lua_pushcfunction(L, luaopen_package);
    lua_pushstring(L, LUA_LOADLIBNAME);
    lua_call(L, 1, 0);
    lua_close( L );
    return 0;
}

リファレンスを見る限りは、全てのライブラリのロードで下の方法を用いるべきと思われる。上の方法でうまく動くライブラリとそうでないライブラリが存在する。
luaL_openlibs( L ); // OK
luaopen_base( L ); // OK
luaopen_math( L ); // OK
luaopen_string( L ); // OK
luaopen_table( L ); // OK
luaopen_debug( L ); // OK
luaopen_package( L ); // NG
luaopen_io( L ); // NG
環境によるかもしれないので必ず上を使いましょう。

0 件のコメント: