web-dev-qa-db-ja.com

スタンドアロンのLua実行可能ファイルを作成する

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

私はそれが可能であると信じています(PLTスキームは同じ方法でスタンドアロンの実行可能ファイルの作成を許可します)が、どのように、正確に?

37
h3rald

srlua を確認してください。それはあなたが必要とするものを行います。

Luaの作者の一人からです。このアドレスには、コンパイル済みのWindowsバイナリも含まれているので、もっと簡単だと思います。

28
Edwin Jarvis

スクリプトから実行可能にするには、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;
}
9
mad nick

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

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

7
Ignacio

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

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

他のソリューションでは、インタープリターが一生懸命働く必要はありませんが、より複雑なリンクが必要ですが、この方法では、スクリプトの実行は次のように簡単です。

copy interpreter.exe+script.lua script.exe
3
Mike F

2018年現在、 luastatic はこれを行うために積極的に維持されているツールです。承認された回答のsrluaとこのページの他のツールはメンテナンスされていないようです。

1
polm23

このトピックにはいくぶん「永続的な」関心があり、可能な解決策は新しいソリューションが出現する可能性があるという意味で「流動的」であるため(古いソリューションは廃止される可能性があります)、さらに別の可能性(Windowsの場合)と純粋なLuaソースの依存関係があります。

リンク: 1ステップでLuaソースとそのLuaソースの依存関係をコンパイル用のCファイルに変換するWindowsコンソールユーティリティ

注:他のプラットフォームのバイトコードに違いがある場合を除いて、結果のCコードは、ストックLuaソースをコンパイルできる任意のプラットフォームでコンパイルでき、スタンドアロンのネイティブバイナリを作成できます。 Luaアプリケーション

0
tonypdmtr