私は、いくつかのエクスポート関数を呼び出すのluaスクリプトをコンパイルしたファイルへの結果のバイトコードを保存してから、このバイトコードをロードし、それを実行しようとしているが、私は持っていませんこれを行う方法の例が見つかりました。どのようにこれを行うにはどのような例がありますか?これどうやってするの?コンパイルLuaのコード、店のバイトコードし、それをロードして実行
編集:これはすべての非常に簡単です、私はLuaの+ Luabind(C++)を
私は、いくつかのエクスポート関数を呼び出すのluaスクリプトをコンパイルしたファイルへの結果のバイトコードを保存してから、このバイトコードをロードし、それを実行しようとしているが、私は持っていませんこれを行う方法の例が見つかりました。どのようにこれを行うにはどのような例がありますか?これどうやってするの?コンパイルLuaのコード、店のバイトコードし、それをロードして実行
編集:これはすべての非常に簡単です、私はLuaの+ Luabind(C++)を
使用しています。
まず、あなたはそれを実行せずにのLuaスクリプトをロードします。あなたがエクスポートされた関数にLua状態を接続しているかどうかは関係ありません。スクリプトファイルをコンパイルするだけです。
luaL_loadfile
は、C標準ライブラリ関数を使用してディスクからファイルを読み込み、lua_State
にロードすることができます。また、ファイルを文字列にロードしてluaL_loadstring
を使用してlua_State
にロードすることもできます。
これらの機能の両方がthe documentation for lua_load
通り戻り値とコンパイラエラーを放出します。
コンパイルが成功した場合、lua_State
は今、スタックの最上部にあるLuaの関数としてコンパイルLuaのチャンクを持っています。コンパイルされたバイナリを取得するには、lua_dump
関数を使用する必要があります。コールバックインターフェイスを使用してデータを渡すので、やや複雑です。 the documentation for detailsを参照してください。
は、そのプロセスが完了したら、コンパイル済みのLuaのバイトコードを持っています。それをあなたが選んだファイルに押し込みます。ただ覚えておいてください:バイナリと書いてください。
それはバイトコードをロードするための時間が来るとき、あなたがする必要があるすべてはあなたが前にやったまさに... です。よくほとんど。 Luaには、与えられた "文字列"がLuaのソース文字列またはバイトコードであることを検出するヒューリスティックがあります。だから、あなたは前と同じようにluaL_loadfile
でバイトコードを読み込むことができます。
違いは、バイトコードでluaL_loadstring
を使用することができないということです。この関数は、NULLで終了する文字列を予期しています。バイトコードにはNULL文字が埋め込まれていることがあります。特殊なファイルシステムなどを使用しているため、ファイルIOを自分で実行したい場合は、lua_load
を直接使用する必要があります。どちらもlua_dump
のようなコールバックインターフェイスを使用します。だからread up on how to use it。
このような健全な答えがありましたら願います。 – vines
偉大な答え、それはまさに私がそれがそうであると思ったものですが、私はちょうど何を使うべきかを知らなかった。やってみます。さて、このようなもの(明確かつ客観的)をFAQやドキュメンテーションに載せることがどれほど難しいか教えてください。ありがとうございました! – WoLfulus
@ WoLfulus: "Lua load bytecode"をGoogledした場合、[非常に最初のリンク](http://csl.sublevel3.org/lua/)はあなたが知る必要があるすべてをあなたに伝えていました。だから私はこれに関するFAQの必要性を見ていない。また、アプリケーション 'luac'はすでにLuaスクリプトをバイトコードにコンパイルすることができますので、プログラムを実行する必要はありません。だから、実際には、FAQの必要はありません。 Googleの正当な使用。 –