7

私のアプリケーションでは、すべての Lua ライブラリが C バックエンドから公開されています。ここで、Lua モジュールをロードする必要があります。この方法は次のようです。

lua_getglobal(L, "require");
lua_pushstring(L, libname);
lua_pcall(L, 1, 0, 0);

を検索しpackage.pathて見つけ<libname>.luaてロードします。

Lua モジュールを C アプリケーションに組み込む(モジュールが C アプリケーションの一部になるようにする) ことはできますか? Lua モジュールを個別にパッケージ化する必要がないようにします。どういうわけか、これの参照や例を見つけることができません! :(

ps を使用してLuaJIT-2.0.2おり、問題のライブラリはSciLua/Time(を使用ffi)

4

1 に答える 1

6

はい。

luajit -b Module.lua Module_bc.c

モジュールをバイトコードにコンパイルし、そのバイトコードを含む C 配列初期化子を出力します。共有ライブラリを有効にしてビルドし、この配列をメインの実行可能ファイルからエクスポートすると、requireがそれを見つけます (.. を探す必要はありませんModule.lua)。

動作していることをテストするには、モジュールを実行するpackage.path = ""前に設定します。requireそれでも機能する場合は、プリロードが機能しておりModule.lua、現在のディレクトリのファイルを使用しているだけではないことがわかります。

http://luajit.org/running.html

その他の注意事項:

  • モジュールが ( を使用して) 外部ファイルに依存している場合io.open、そのファイルは引き続き存在する必要があります。たとえば、一部の ffi モジュールは C ヘッダー ファイルを開こうとして、ffi.cdef
  • Makefile レシピなどとModule_bc.c同期しておく必要があります。そうしないと、紛らわしいバグが発生します。Module.lua
于 2013-10-26T12:44:48.210 に答える