5 に答える
Windows で Lua ファイルを実行可能ファイルにパッケージ化するには、いくつかのオプションがあります。srluaがあり、wxLua の wxLuaFreeze ( Windows のバイナリとして利用可能) があり、このSO answerにはさらに多くのオプションがあります。
基本的に、主な 2 つのオプションは次のとおりです。(1) コンパイル済みの exe ファイルに Lua コードを追加し、その exe ファイルの実行時に読み込まれて実行されるようにする (2) Lua コードをコンパイルして実際の実行可能ファイルに変換するバイトコード、C、そしてターゲット プラットフォームへ。
MacOSの問題に関してmkdir -p
は、mkdirが中間ディレクトリを作成するように求められていることを意味します(たとえば、作成を要求した場合、それらが存在しない場合/a/b/c
も作成されます)。/a/b
実行している MacOS のバージョンが不明であるため、詳細な回答を提供することは困難です。
OSX 端末の問題の場合:
このコマンドは機能するはずです
export LUA_DIR=/usr/local/lib/lua/5.1
このコマンドは、おそらくパーミッションの問題を引き起こします:
mkdir -p /usr/local/lib/lua/5.1
それを解決するためにこれを試すことができます。パスワードの入力を求められます。
sudo mkdir -p /usr/local/lib/lua/5.1
このコマンドは OSX とは関係がなく、機能しません。これは Windows コマンドです。
SET LUA_DIR=”c:\program files\lua\5.1”
今のところ、Lua の標準ディストリビューションは、スクリプトをネイティブの実行可能コードにコンパイルしません。最初にスクリプトをバイトコードにコンパイルし、次にかなり高速な静的解釈でバイトコードを解釈することによってスクリプトを実行します (これは、ネイティブまたは仮想システム間で簡単に移植でき、攻撃に対して非常に耐性があることも意味します (これは、ネイティブ コンパイラ自体)。
また、Lua はまだ Java や .Net のようなランタイム JIT コンパイラを備えていません。Lua は安全なサンドボックスを生成するための VM をまだ備えていません。
バイトコード (またはソース スクリプトを直接) を C ソースに変換する Lua パッケージが存在します。C ソースは、Lua エンジン自体をコンパイルするために使用されるのと同じ C コンパイラを介して、Lua ライブラリをネイティブ モードに変換するために使用できます (これが組み込みライブラリの方法です)。ただし、一部のタイムクリティカルな部分では手動でわずかに最適化されています)。
ただし、Lua を JavaScript ソースにコンパイルし、Javascript を使用して高速なパフォーマンスで実行することは可能です。これは、今日の Javascript インタープリターは、独自のバイトコード用の JIT コンパイラーを備えた実装された VM で優れたパフォーマンスを発揮するためです。
Lua バイトコードを .Net または Java ソースに変換して、Lua から直接実行することも可能です (そのためには、.Net または Java または Javascript に移植された Lua のバージョンが必要です。 C/C++ で JIT コンパイラを使用して VM を直接開発するよりも複雑です (適度に複雑な部分はバイトコード検証機能ですが、本当に複雑な部分はメモリ マネージャー、ガベージ コレクター、およびサンドボックスであり、Lua スクリプトは完全に分離されます。独自のメモリ用の Lua エンジン自体ですが、ランタイム オプティマイザーとプロファイリング統計の収集の場合は最も複雑な部分です。これは、Java、.Net、Javascript、PHP/Zend、Python、Perl 用の最新の VM で行われています... )。
Luaを移植し、VMでネイティブに近い速度で実行される独自のバイトコードにコンパイラを実装するのに最適なパフォーマンスを提供する他の言語VMはわかりません。しかし、自分自身で実行できるバイトコードを自己生成するプログラム (はるかに単純な言語) に関する私自身の小さな経験から、Java が .Net および Javascript よりもパフォーマンスで勝っていることを常に示してきました。これはおそらく、Java がプロファイリング ベースの動的コード オプティマイザを備えているためです。
(逆に、.Net オプティマイザーは、.Net VM 自体のインストール中に収集されたプロファイリング データを使用して、またはスクリプトの最初のインスタンス化時に、プログラムのインストール中に 1 回だけ実行されます。プログラム自体、およびプラットフォームの機能に関するいくつかのチェックされた仮定に基づいています)。
(PHP、Python、または Perl で高速になるかどうかはわかりませんが、新しい Javascript エンジンとの比較は試みられていません)。Lua プログラムの Javascript への移植は比較的簡単です。これは、リンケージの解決が比較的容易なクロージャーを実装しているためです。
おそらく後で、Lua の真の VM 実装と JIT および自己生成コードが表示され、新しいサンドボックス化された VM をインスタンス化して自己生成コードを実行できるようになるでしょう。配布用の EXE ファイルを生成するには時間がかかります。特に、一般的にインストーラーと配布マネージャーも追加する必要があるためです。
したがって、今のところ、別の JIT 対応 VM のバイトコードにコンパイルされた Lua アプリケーションを配布することを想像できます。この生成されたバイトコードは、Lua バイトコードよりも高速であり、Lua のセマンティクスへのリバース エンジニアリングが非常に複雑になります。最初に他の VM のバイトコードから Lua のバイトコードへの 2 つの別々のリバース エンジニアリング。両方のバイトコードはいくつかの簡単に推測できるルールとオプションを失ってテストされ、続いて再び Lua ソースに到達します。
したがって、あなたの質問を正しく理解できれば、あなたは Windows で Lua を構築しようとしています。
これはもちろん可能ですが、初心者には簡単ではありません。特別な要件がない限り、インストールがはるかに簡単なバイナリ ディストリビューションを使用することを強くお勧めします。
いくつかの Windows ディストリビューションを次に示します。
Windows にアクセス許可の問題がありcmd
ます。または PowerShell を管理者モードで作成してみてください。C:\Program Files
通常のユーザー アカウントには書き込み権限がない保護されたディレクトリです。
OS X の問題については、mkdir OS X のマニュアル ページを調べて、コマンドが正しいことを確認してください。