Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

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

copy interpreter.exe+script.lua script.exe

Ответ 5

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

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

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