以下はうまくいかないコード。
#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
環境によるかもしれないので必ず上を使いましょう。