Скомпилируйте ваши файлы lua

Как я могу собрать и скомпилировать свои собственные файлы Lua в Windows? И сделать их исполняемыми.

Я читаю Программу Luginning Lua, и у меня установлены Windows 7 и MacOS Lion. Мне трудно следовать инструкциям. Они не работают для меня.

В MacOS я открываю терминал и помещаю их в:

  1. export LUA_DIR=/usr/local/lib/lua/5.1
  2. mkdir -p /usr/local/lib/lua/5.1 (это говорит мне, mkdir: illegal option) и отсюда не могу следовать
  3. SET LUA_DIR=”c:\program files\lua\5.1”

Что касается Windows, я делаю это в соответствии с книгой. Это то, что я вижу в своей раковине c:\Users\bd>

  1. mkdir "c:\program files\utility" и он говорит мне, что доступ запрещен

Я попытался щелкнуть правой кнопкой мыши на этой папке и проверить read only, Но это не работает. Любые подсказки будут оценены, эта часть меня действительно смущает.

5 ответов

Решение

Чтобы упаковать ваши файлы Lua в исполняемый файл под Windows, у вас есть несколько вариантов. Есть srlua, есть wxLuaFreeze от wxLua (доступен как бинарный файл для Windows), и в этом ответе SO есть больше опций.

По сути, основными двумя вариантами являются: (1) добавление кода Lua в предварительно скомпилированный исполняемый файл, так что он будет загружаться и выполняться при запуске этого исполняемого файла, и (2) преобразование кода Lua в реальный исполняемый файл путем его компиляции к байт-коду, затем к C, а затем к вашей целевой платформе.

Что касается вашей проблемы MacOS, mkdir -p означает, что mkdir попросили создать промежуточные каталоги (например, вы попросили создать /a/b/c, это также создаст /a/b если таковых не существует). Поскольку вы не говорите, какую версию MacOS вы используете, сложно дать более подробный ответ.

На данный момент стандартный дистрибутив Lua не компилирует скрипт в собственный исполняемый код; он выполняет ваши сценарии, сначала скомпилировав его в байт-код, а затем интерпретируя байт-код с достаточно быстрой статической интерпретацией (это также означает, что он легко переносится на собственные или виртуальные системы и очень устойчив к атакам (которые могут быть направлены на ошибки в сам родной компилятор).

Кроме того, Lua по-прежнему не поддерживает JIT-компилятор времени выполнения, такой как Java и.Net: Lua по-прежнему не имеет виртуальной машины для создания безопасной песочницы.

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

Однако возможно скомпилировать Lua в исходный код javascript и выполнить его с высокой производительностью с использованием Javascript, потому что сегодняшние интерпретации Javascript действительно имеют хорошую производительность с их реализованной виртуальной машиной, оснащенной JIT-компилятором для их собственных байт-кодов.

Это также возможно путем преобразования его байт-кода Lua в источник.Net или Java, который затем может быть выполнен непосредственно из Lua (для этого вам нужна версия Lua, которая была перенесена в.Net или Java или Javascript, что не является так сложнее, чем разрабатывать на C/C++ непосредственно виртуальную машину с JIT-компилятором (умеренно сложная часть - это верификатор байт-кода, но действительно сложной частью является менеджер памяти, его сборщик мусора и его песочница, так что ваш скрипт Lua будет полностью изолирован от сам движок Lua для собственной памяти, но наиболее сложная часть, если оптимизатор времени выполнения и сбор статистики профилирования: это было сделано в современных виртуальных машинах для Java, .Net, Javascript, PHP/Zend, Python, Perl...).

Я не знаю, какая виртуальная машина на другом языке могла бы предложить лучшую производительность для переноса Lua и реализации на нем компилятора для собственного байт-кода, работающего на своей виртуальной скорости почти на собственной скорости. Но мой собственный небольшой опыт работы с программами (на гораздо более простом языке), самостоятельно генерирующими байт-код, который они могут запускать самостоятельно, всегда показывал мне Java-выигрыш в производительности по сравнению с.Net и Javascript. Скорее всего, это связано с тем, что в Java имеется динамический оптимизатор кода на основе профилирования.

(На противоположной стороне.Net оптимизатор запускается только один раз во время установки программы, используя некоторые данные профилирования, собранные во время установки самой виртуальной машины.Net, или при первом запуске сценария, без реального знания каких-либо данных профилирования, собранных во время выполнения скомпилированного Сама программа, и основана на некоторых проверенных предположениях о возможностях платформы).

(Я бы не стал быстрее в PHP, Python или Perl; хотя сравнение с более новыми движками Javascript никогда не предпринималось). Перенос Lua-программы на Javascript относительно прост, потому что он реализует замыкания с относительно простым разрешением связей.

Вероятно, позже мы увидим настоящую виртуальную реализацию Lua с JIT и самогенерирующим кодом, а также возможность создания новых виртуальных машин в "песочнице" для запуска собственного кода. Генерация EXE-файла для распространения займет больше времени; особенно потому, что обычно требуется добавить также установщик и менеджер распространения.

Итак, на данный момент мы можем представить себе распространение приложений Lua, скомпилированных с байт-кодом другой виртуальной машины с поддержкой JIT: этот сгенерированный байт-код будет быстрее, чем байт-код Lua, а затем будет чрезвычайно сложным для обратного инжиниринга в семантику Lua, поскольку для этого потребуется два отдельных реверс-инжиниринга сначала от байт-кода другой виртуальной машины к байт-коду Lua, причем оба байт-кода теряют некоторые удобные для проверки правила и параметры, проверенные и следующие, а затем снова передают исходный код Lua

Для проблемы терминала OSX:

Эта команда должна работать

export LUA_DIR=/usr/local/lib/lua/5.1

Эта команда, вероятно, даст вам проблемы с разрешениями:

mkdir -p /usr/local/lib/lua/5.1

Вы можете попробовать это, чтобы решить это. Вам будет предложено ввести пароль:

sudo mkdir -p /usr/local/lib/lua/5.1

Эта команда не имеет ничего общего с OSX и не будет работать. Это команда Windows:

SET LUA_DIR=”c:\program files\lua\5.1”

У вас проблема с разрешениями в Windows- попробуйте создать cmd или PowerShell в режиме администратора. C:\Program Files это защищенный каталог, в который обычная учетная запись пользователя не имеет разрешения на запись.

Что касается проблемы OS X, проверьте страницу справочника mkdir OS X, чтобы убедиться, что вы правильно указали команду.

Итак, если я правильно понял ваш вопрос, вы пытаетесь собрать Lua на Windows.

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

Вот несколько дистрибутивов Windows:

Другие вопросы по тегам