問題タブ [luajit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Lua-テーブル内の関数への参照
Table
関数getValue()
、などを含むグローバルテーブルがある場合setValue()
、への参照を格納できますか、Table.getValue
またはへの参照を格納してからTable
メンバー関数を呼び出す必要がありますか?
compilation - 高速なLuaJITコンパイラーを取得しながら、Luaスクリプトを単一の実行可能ファイルにコンパイルする方法は?
LuaJITの超高速パフォーマンスの利点を得ながら、 Luaスクリプトを単一の実行可能ファイルにコンパイルするにはどうすればよいですか?
バックグラウンド:
- 私のLuaスクリプトは、私が作成したWebアプリケーション用です(たとえば、http://example.comをホストするため)
- 私の現在のテクノロジー スタックは、NGINX (Web サーバー)、Lua/LuaJIT (動的コンテンツを取得するための言語) です。
- Web アプリケーションを構成する約 50 以上の
.lua
ファイルがあります (モデル/ビュー/コントローラーから) - FreeBSD 9 オペレーティング システム
展開を簡単にするために、Web アプリケーションを実行するすべての .lua スクリプトを 1 つの実行可能ファイルにコンパイルしたいと思います。
これは可能ですか?
Lua公式にはSRLuaというライブラリが付属しているようです
- .lua を単一の実行可能ファイルにコンパイルすることのマイナス面は何ですか (たとえば、パフォーマンスが低下するなど)?
macos - Mac OS X で wxLua と LuaJIT を組み合わせる
Mac OS X (10.6.8) で wxLua をビルドして、標準の Lua インタープリターの代わりに LuaJIT2 を使用するにはどうすればよいですか?
私が試してみました:
は/Users/finnw/LuaJIT-2.0.0-beta9
、LuaJIT をビルドしたディレクトリです。
また、にコピーsrc/libluajit.a
して、拡張子をからに変更するなど、さまざまな組み合わせを試しましたlib/liblua5.1.a
src/libluajit.so
lib/liblua5.1.so
.so
.dylib
それでも、私は常に LuaJIT ではなく Lua を取得します (ffi
モジュールを必要とするスクリプトをロードすることで確認できます)。
LuaJIT2 に対して強制的にリンクするにはどうすればよいですか? そして、configure --with-lua-prefix
オプションが主張することを実行しないのはなぜですか?
c++ - lua スクリプトを dll にコンパイルしますか?
LuaJIT を使用して Lua コードをバイトコードにコンパイルし、次に静的ライブラリにコンパイルするという話を聞いたことがあります。
理想的には、メインの実行可能ファイルを再構築する必要がないように、Lua コードを動的ライブラリにコンパイルできるようにしたいと考えています。
Lua を dll にコンパイルできますか? もしそうなら、ヘッダーがないのでどうやってC++コードにリンクしますか? 最後に、プログラム内から Lua スクリプトをどのように実行しますか?
c - LuaJITで標準のオープンダイアログを呼び出すと、アクセス違反が発生します
LuaJITのFFIを使用して、MSDNのGetOpenFileNameの例に従いました。私はこれを2日間機能させようとしてきましたが、ダイアログが開かないだけでなく、全体がクラッシュします。
OllyDdbでデバッグすると、comdlg32.dllのどこかに醜いアクセス違反がスローされます。
これが、基本的なコードだけを使用した概念実証です。構造体サイズがゼロであると指定すると、問題なく終了し、GetLastError()は87(ERROR_INVALID_PARAMETER)をスローします。
したがって、問題は構造体またはFFIに関連していると思います。
誰かがここに光を当てることができれば...ありがとう。
lua - luajit2 プロセス間の通信?
同じマシンで 2 つ以上の個別の Lua プログラム (LuaJIT2 で実行) を簡単に起動できます。しかし、これらのプログラムが通信できる方法はありますか?
私が思いつく最善の解決策は、各プログラムがテキスト ファイルを書き込めて、そのファイルを読み込めるようにすることです。しかし、これは非常に遅い解決策です (テキスト ファイルが仮想 RAM ディスクに保存されている場合でも)。
これに役立つ可能性のあるzeromqおよびその他のものがあることを私は知っています...問題は、指示が長すぎて複雑/紛らわしいことです(少なくとも私にとっては)。
推奨事項はありますか?特に、どんなに単純であっても、いくつかの実用的なコード例をいただければ幸いです。あるLuaJIT2プロセスから別のLuaJIT2プロセスに1つの変数の値を渡す方法さえ。
(問題があれば、Windows XP SP3 を使用しています...)
callback - LuaJIT FFI コールバックのパフォーマンス
LuaJIT FFI ドキュメントでは、C から Lua コードへの呼び出しは比較的遅く、可能な場合は避けることを推奨しています。
パフォーマンスが重要な作業にコールバックを使用しないでください。たとえば、ユーザー定義関数を使用して積分する数値積分ルーチンを検討してください。ユーザー定義の Lua 関数を C コードから何百万回も呼び出すのはよくありません。コールバックのオーバーヘッドは、パフォーマンスにとって絶対に有害です。
新しい設計では、プッシュ スタイルの API (結果ごとにコールバックを繰り返し呼び出す C 関数) は避けてください。代わりに、プル スタイルの API を使用します (C 関数を繰り返し呼び出して、新しい結果を取得します)。FFI を介した Lua から C への呼び出しは、その逆よりもはるかに高速です。適切に設計されたほとんどのライブラリは、すでにプル スタイルの API (読み取り/書き込み、取得/入力) を使用しています。
ただし、C からのコールバックがどれほど遅いかはわかりません。コールバックを使用するコードをスピードアップしたい場合、プル スタイル API を使用するように書き直した場合、どのくらいのスピードアップが期待できますか? 各スタイルの API を使用して同等の機能の実装を比較するベンチマークを持っている人はいますか?
lua - cdata 構造を lua 文字列に変換するにはどうすればよいですか?
LuaJit でいくつかの複雑なバイナリ メッセージを読み取る必要がある小さなアプリケーションを作成中です。
私は bit モジュールと string.rep をよく使っています。しかし、それはすべて非常に面倒です。私は LuaJit を使用するのが初めてで、FFI を使用するより簡単な方法があると思います。
CI では、次のような構造を宣言できます。
LuaJitのFFIを読むと、宣言できるようです
次に mystruct を作成し、次のようにフィールドにアクセスできます。
しかし、これを lua 文字列に戻すにはどうすればよいでしょうか?
私はこれを試しましたが、私が望んでいたことをしているようには見えませんでした。
この:
次のエラーが生成されます。
だから私はキャストを試しました:
エラーはありませんが、ワイヤ上では間違っているようです。
android - MacでAndroid用のLuaJit2をコンパイルします。アセンブラエラー:lj_vm.s:5:エラー:不明な疑似操作: `.private_extern '
MacでAndroidLuaJitをビルドする方法やpseudo-op: '.private_extern'
、一般的なアセンブラーエラーを解決するためのヒントについてアドバイスしてください。
私はMacを使用しており、doc /installまたはhttp://luajit.org/install.html#androidでLuaJit2に準拠するための指示に従います。
私が行った唯一の変更は、クロスコンパイラーを取得するために変更linux-x86
することです。また、インストールに関する注意事項(ホストOSとターゲットOSが異なる場合は常に、指定する必要があります。そうしないと、アセンブラーまたはリンカーのエラーが発生します…
)を追加しました(使用した場合と使用しない場合)。</ p>darwin-x86
NDK
TARGET_SYS=Linux
TARGET_SYS
したがって、私のビルドスクリプトは次のようになります。
私の$ANDROID_NDK
ポイントr8b NDK
。しかし、私も試しました、r8
そしてr7
私はで試しgcc 4.6
ましたr8b
。すべての場合で、同様のエラーが発生します。
android - cygwin の下で Android で LuaJIT ビルド済み静的ライブラリを使用する場合のリンカの問題
私は昨日のほとんどをこれと格闘してうまくいかなかったと思います。問題の根本を見つけようとする次のステップでさえ、私は今のところ立ち往生しています!
ビルド済みの LuaJIT スタティック ライブラリを参照しようとしている Android 2.2 プロジェクトがありますが、ndk-build で次のエラーが表示されます。
LuaJIT を liblua.a としてビルドし、それを関連するヘッダーと共に JNI ディレクトリのルートに配置しました。以下に示すように、Android.mkが1つあります。
test_andrdoid.cpp には、次のコードがあります。
これはリンカ エラーのようです。何らかの理由でスタティック ライブラリ ファイルが正しく参照されていません。しかし、私には、メイクファイルは正しいようです。
どんな助けでも大歓迎です!
- まず、すべてがどのようにリンクされているか、共有ライブラリ モジュールが実際に静的ライブラリにアクセスできるかどうかを確認する方法はありますか?
追加情報
関連する可能性があると思われる追加情報を次に示します。
ライブラリの構築
多分それは正しくない静的libファイルですか?(ビルド済みのものをダウンロードして確認できる場所はありますか?)。このスクリプトで作成しました(LuaJIT Webサイトから)。最新の安定したLuaJIT、1.1.8を使用しています
これで問題なくビルドされ、/src/ ディレクトリに liblua.a が作成されます。(nm を実行したところ、予想されるすべての関数プロトタイプが一覧表示されました)。本当にARM用のビルドであることを確認するために他にできることがあるかどうかわかりませんか?
NDKABI=8 は、Android 2.2 をターゲットにしていることを意味します
テスト Android プロジェクトのセットアップ
次のコマンドを使用して、新しい 2.2 Android プロジェクトを作成します。
Target 3 は、私のシステムで Android 2.2 にマップされます ( を使用android list devices
)。jni フォルダーを作成し、test_android.h と test_android.cpp を用意します。次に、ndk-build を使用してそれらをビルドします。これは、LuaJIT を参照しようとしていないときにうまく機能します。Lua を使用しようとすると、次のエラーが表示されます。
完全なエラー メッセージ
私が周りを検索して見た問題のほとんどは、ローカルライブラリのインクルード順序が原因です.1つのライブラリしか持っていないため、これは問題ではなく、より根本的な問題を解決できたことを示唆しています:)
アップデート
それ以来、通常の Lua をビルドし、それをビルド済みの静的ライブラリとして追加しましたが、正常に動作します。LuaJIT をどのようにビルドしたかが疑わしいのですが、それを正しくビルドする方法や、動作するビルド済みバージョンを見つける方法がわかりません。