39

Lua スクリプトからスタンドアロンの .exe ファイルを作成する簡単な方法はありますか? 基本的に、これには Lua インタープリターとスクリプトのリンクが含まれます。

私はそれが可能だと信じています (PLT スキームでは、同じ方法でスタンドアロンの実行可能ファイルを作成できます)。

4

6 に答える 6

30

srluaをチェックしてください。それはあなたが必要とすることをします。

これは、Lua の作成者の 1 人によるものです。このアドレスには、コンパイル済みの Windows バイナリもあります。

于 2008-10-11T21:08:19.810 に答える
10

スクリプトから実行可能にするには、bin2c ユーティリティを次のように使用します。

luac script.lua -o script.luac
bin2c script.luac > code.c

次に、テキスト エディター ファイル main.c で作成し、好みのコンパイラーでコンパイル/リンクします。それでおしまい。(注 - 実行可能ファイルはコマンド ライン引数もサポートします)

MSVC の例:

cl /I "./" /I "$(LUA_DIR)\include" /D "_CRT_SECURE_NO_DEPRECATE" /D "_MBCS" /GF /FD /EHsc /MD /Gy /TC /c main.c
ld /SUBSYSTEM:CONSOLE /RELEASE /ENTRY:"mainCRTStartup" /MACHINE:X86 /MANIFEST $(LUA_DIR)\lib\lua5.1.lib main.obj /out:script.exe
mt -manifest $script.manifest -outputresource:script.exe;1

GUI 実行可能ファイルには /SUBSYSTEM:WINDOWS を使用します。初めての場合は簡単ではありませんが、バッチ ファイルを作成してプロセスを自動化することができます。

main.c:

#include <stdlib.h>
#include <stdio.h>
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"

int main(int argc, char *argv[]) {
  int i;
  lua_State *L = luaL_newstate();
  luaL_openlibs(L);
  lua_newtable(L);
  for (i = 0; i < argc; i++) {
    lua_pushnumber(L, i);
    lua_pushstring(L, argv[i]);
    lua_rawset(L, -3);
  }
  lua_setglobal(L, "arg");
#include "code.c"
  lua_close(L);
  return 0;
}
于 2009-07-19T14:41:58.790 に答える
7

上記の提案に加えて、L-Biaを見ることができます。

lua スクリプトと必要な動的ライブラリを含むスタンドアロンの実行可能ファイルを作成できます。

于 2008-12-09T21:00:47.100 に答える
5

2018 年の時点で、luastaticはこれを行う積極的に維持されているツールです。受け入れられた回答の srlua と、このページの他のツールは維持されていないようです。

于 2018-09-26T14:27:28.263 に答える
4

「.exe」と言うので、Windows ソリューションを探していると思います。1 つのアイデアは、ビルド済みのインタープリター実行可能ファイルにスクリプトを追加することです。あなたの本で「簡単」と見なされる場合とそうでない場合があります。

インタープリターは、自分自身を読み取り、そのヘッダーを解析して、通常の .exe データが終了する場所 (つまり、スクリプトが開始する場所) を判断し、ファイルの残りを Lua に渡すことができる必要があります。

他のソリューションでは、インタープリターがそれほど苦労する必要はありませんが、より複雑なリンクが必要になりますが、この方法では、スクリプトの実行は次のように簡単になります。

copy interpreter.exe+script.lua script.exe
于 2008-10-11T20:41:01.083 に答える