Lua5.2.1を使用するVisualStudio2008 C++03アプリケーションがあります。「foo」というモジュールでLuaを拡張したいのですがrequire("foo")
、Luaスクリプトを呼び出すと、次のエラーが発生します。
foo_test.lua:1: module 'foo' not found:
no field package.preload['process']
no file '!\lua\process.lua'
no file '!\lua\process\init.lua'
no file '!\process.lua'
no file '!\process\
私のLuaスクリプト:
foo.bar()
私のlua_foo.hファイル:
#include <lua.h>
extern "C" int luaopen_foo( lua_State* L );
私のlua_foo.cppファイル:
#include "lua_foo.h"
#include <lua.hpp>
static int l_bar( lua_State *L )
{
puts( "in bar()" );
return 1;
}
int luaopen_foo( lua_State *L )
{
static const luaL_Reg foo[] = {
{ "bar", l_bar },
{ NULL, NULL }
};
luaL_newlib( L, foo );
return 1;
}
これらは、メインのLua実行可能ファイルに静的にリンクされている静的ライブラリ「lua_foo.lib」にコンパイルされます。
誰かが私がどこで間違っているのかを理解するのを手伝ってくれますか?ありがとう。(今のところ)c ++ラッパーは避けたいので、このライブラリをメインのLuaエンジンとは別のDLLとしてパッケージ化したくありません。
編集
問題はluaエンジンコードにありました。luaL_requiref
@NicolBolasごとの提案を追加しました。
lua_State* L = luaL_newstate();
if( NULL != L )
{
luaL_openlibs( L );
luaL_requiref( token.get(), "foo", luaopen_foo, 1 );
luaL_dofile( L, "foo_test.lua" );
lua_close( L );
}