Создание автономных исполняемых файлов Lua

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

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

7 ответов

Решение

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

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

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

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

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

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

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

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

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

copy interpreter.exe+script.lua script.exe

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

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

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

Вот простой способ:

  1. Загрузите бины lua с http://luabinaries.sourceforge.net/
  2. Извлеките этот файл и создайте app.lua в той же папке.
  3. Откройте запуск с помощью клавиши WIN плюс R и введите iexpress.
  4. В iexpress выберите «Создать новый файл директивы самоизвлечения» и нажмите «Далее».
  5. Выберите «Извлечь файлы», запустите команду установки и нажмите «Далее».
  6. Укажите имя вашего приложения. Выберите «Без подсказки» и не отображайте лицензию, а затем, когда он попросит вас выбрать файл, выберите папку, в которой у вас есть ваш app.lua и эти ящики lua.
  7. Выберите все и нажмите «Далее». В программе установки введите «lua54.exe app.lua» (без «»). Выберите значение по умолчанию в окне отображения и в готовом сообщении выберите «Нет сообщений». 11. В имени пакета и параметрах нажмите «Обзор» и введите имя вашего исполняемого файла, а затем выберите скрыть ход извлечения и сохранить файл, используя длинное имя файла Выберите без перезагрузки, а затем вы можете сохранить файл sed или нет Выберите следующий и следующий, он должен создать исполняемый файл, вы можете дважды щелкнуть по нему, чтобы запустить приложение. Недостатки : Люди могут легко найти ваш исходный код, переименовав файл в .zip после .exe.
Другие вопросы по тегам