Создание автономных исполняемых файлов Lua - PullRequest
37 голосов
/ 11 октября 2008

Существует ли простой способ создания автономных файлов .exe из сценариев Lua? В основном это будет связано с привязкой интерпретатора Lua и сценариев.

Я считаю, что это возможно (схема PLT позволяет создавать автономные исполняемые файлы таким же образом), но как именно?

Ответы [ 6 ]

28 голосов
/ 12 октября 2008

Проверьте для srlua . Он делает то, что вам нужно.

Это от одного из авторов Lua. По этому адресу есть также предварительно скомпилированные двоичные файлы Windows, так что я думаю, вам будет еще проще.

9 голосов
/ 19 июля 2009

Чтобы сделать исполняемый файл из скрипта, используйте утилиту 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

Используйте / SUBSYSTEM: WINDOWS для исполняемого файла GUI. Все это непросто только в первый раз, вы можете создать пакетный файл для автоматизации процесса, как только вы успешно его попробуете.

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;
}
7 голосов
/ 10 декабря 2008

Помимо вышеупомянутых предложений, вы можете взглянуть на L-Bia .

Может создавать автономные исполняемые файлы, включая сценарии lua и необходимые динамические библиотеки.

3 голосов
/ 12 октября 2008

Поскольку вы говорите «.exe», я предполагаю, что вы ищете решение для Windows. Одна идея состоит в том, чтобы просто добавить сценарии в готовый исполняемый файл интерпретатора. Это может или не может быть квалифицировано как «легкий» в вашей книге.

Интерпретатор должен уметь читать сам, анализировать свой заголовок, чтобы определить, где заканчиваются обычные данные .exe (т.е. где начинается скрипт), а затем передать оставшуюся часть файла Lua.

Другие решения не требуют, чтобы интерпретатор работал усердно, но требуют более сложного связывания, тогда как при использовании этого метода выполнение сценария может быть таким простым, как

copy interpreter.exe+script.lua script.exe
0 голосов
/ 26 сентября 2018

Начиная с 2018 года, luastatic является активно поддерживаемым инструментом, который делает это. srlua из принятого ответа и другие инструменты на этой странице, кажется, не поддерживаются.

0 голосов
/ 19 апреля 2017

Поскольку эта тема представляет собой несколько «вечный» интерес, а возможные ответы являются «текучими» в том смысле, что могут появиться новые решения (в то время как старые могут устареть), здесь есть еще одна возможность (для Windows) и чисто исходные зависимости Lua .

Ссылка: Консольная утилита Windows для преобразования за один шаг исходного кода Lua с зависимостями исходного кода Lua в файл C, готовый для компиляции.

Примечание. За исключением случаев, когда существуют различия в байт-коде для других платформ, полученный код C должен быть способен компилироваться на любой платформе, которая может компилировать исходный исходный код Lua, и создавать автономные собственные двоичные файлы ваших приложений Lua .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...