




Поскольку вы говорите ".exe", я предполагаю, что вы ищете решение для Windows. Одна из идей - просто добавить сценарии к готовому исполняемому файлу интерпретатора. Это может или не может квалифицироваться как «легкий» в вашей книге.
Интерпретатор должен иметь возможность читать сам себя, анализировать свой заголовок, чтобы определить, где заканчиваются обычные данные .exe (т.е. где начинается сценарий), а затем передать оставшуюся часть файла Lua.
Другие решения не требуют, чтобы интерпретатор работал так усердно, но требуют более сложного связывания, тогда как с этим методом выполнение сценария может быть таким же простым, как
copy interpreter.exe+script.lua script.exe
Проверьте шрлуа. Он делает то, что вам нужно.
Это от одного из авторов Lua. По этому адресу есть также предварительно скомпилированные двоичные файлы Windows, так что, я думаю, вам будет еще проще.
srlua распространяет двоичные файлы в своем репозитории на github - github.com/LuaDist/srlua У меня они работали очень хорошо - glue.exe srlua.exe my.lua my.exe
Помимо приведенных выше предложений, вы можете взглянуть на L-Bia.
Он может создавать автономные исполняемые файлы, включая сценарии lua и необходимые динамические библиотеки.
Чтобы сделать исполняемый файл из скрипта, воспользуйтесь утилитой 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;
}
Обратите внимание, что bin2c был удален с Lua 5.1, поэтому вам нужен другой способ упаковать байт-код и поместить его в стек Lua. См. lua-users.org/wiki/BinToCee для повторной реализации в Lua.
Поскольку у этой темы есть несколько «постоянный» интерес, а возможные ответы «текучие» в том смысле, что могут появиться новые решения (в то время как старые могут стать устаревшими), вот еще одна возможность (для Windows) и чисто исходные зависимости Lua.
Примечание. За исключением случаев, когда существуют различия в байт-коде для других платформ, полученный код C должен иметь возможность компилироваться на любой платформе, которая может компилировать исходный код Lua и создавать автономные собственные двоичные файлы ваших приложений Lua.
По состоянию на 2018 год луастатический является активно поддерживаемым инструментом, который делает это. srlua из принятого ответа, а другие инструменты на этой странице, похоже, не поддерживаются.
Итак, есть ли какой-нибудь инструмент, который может 1. найти все необходимые пакеты и библиотеки DLL, а затем автоматически их все скопировать? 2. упаковать исходные файлы Lua в EXE, чтобы обеспечить низкоуровневую защиту исходного кода. Точно так же, как pyinstaller. Так какой софт? Спасибо
К сожалению, srlua у меня не сработал. Решение с luac / bin2c, приведенное ниже, работало.