Как упаковать perl-скрипт со всеми зависимостями от Windows для запуска на Linux-машине?

Я использовал pp PAR::Packer для создания автономного исполняемого файла для запуска на компьютере с Windows.

Может ли кто-нибудь объяснить, как создать Perl-скрипт со всеми зависимыми пакетами с этой машины Windows, чтобы создать отдельный файл для запуска на машине Linux?


person Vinay Gudisagar    schedule 08.04.2016    source источник


Ответы (1)


Создание двоичного файла, который запускается на компьютере с Linux, начиная с компьютера с Windows < strong>не возможно.



Вы используете команду pp (из PAR-Packer) наверное, точно так же, как вы делали в Windows

pp -S -M Some::Module -M Some::Other::Module -o youBinary.bin Script1.pl Script2.pl ScriptN.pl

Что следует отметить:

  • Флаг -M может быть необходим, потому что иногда автоматический поиск зависимостей может не работать (некоторые из них загружаются динамически во время выполнения, поэтому нужно немного проб и ошибок, пока вы не получите хорошую комбинацию). Будьте особенно осторожны, когда видите подобные предупреждения при выполнении pp:

Use of runtime loader module Module::Runtime detected.  Results of static scanning may be incomplete.
Use of runtime loader module Module::Implementation detected.  Results of static scanning may be incomplete.

  • #P4# <блочная цитата> #P5# #P6#

Помните также о создании двоичного файла на машине со «старой» libc. Если вы сделаете это на новейшем Linux, вам понадобится новейший Linux, чтобы запустить его, что сделает его менее переносимым.

Обратите внимание, что даже если ваш perl был собран с общей библиотекой, для корректной работы «автономного исполняемого файла» выше не потребуется отдельный perl5x.dll или libperl.so. Но даже в этом случае базовые системные библиотеки, такие как libc, должны быть совместимы между хостом и целевой машиной.

Наслаждайтесь своим автономным двоичным файлом Perl.

ИЗМЕНИТЬ

Создание двоичного файла, который запускается на компьютере с Linux, начиная с компьютера с Windows < strong>не возможно.

Сценарии Perl Packager говорят, что они могут создавать исполняемые файлы, работающие в той же ОС. Могу ли я использовать его для создания двоичного файла Win32 с Linux-машиной? Или что мне следует использовать для создания исполняемого двоичного файла Win32 в Linux из моего скрипта?

Невозможно создать автономные двоичные файлы для платформы, отличной от той, на которой вы сейчас работаете. Как правило, это сложная проблема, поскольку вам придется кросс-компилировать все модули XS и сам perl. Не хорошо.

Например, если вы хотите разработать приложение для Linux и поставлять его как для Linux/x86, так и для Win32/x86, лучше настроить виртуальную машину с Windows (XP или 2000 или любой другой) и установить Perl. На этой машине используйте PAR/pp для упаковки вашего приложения для Win32.

На каких платформах можно запускать PAR? На каких платформах будет работать полученный исполняемый файл?

Win32 (95/98/ME/NT4/2K/XP), FreeBSD, Linux, AIX, Solaris, Darwin и Cygwin.

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

person LaintalAy    schedule 08.04.2016
comment
Привет @eballes, спасибо за ваше предложение. Я пробовал это, но он не создает двоичный файл. Когда я пытался запустить на Linux-машине, он говорит Невозможно выполнить двоичный файл. Это файл приложения Windows. Простое использование youBinary.bin не создает двоичный файл. Чтобы убедиться в этом, я переименовал файл youBinary.bin в youBinary.exe. Работает на окнах, - person Vinay Gudisagar; 18.04.2016
comment
Я отредактировал свой вопрос. По сути, вы не можете кросс-компилировать с PAR (то есть в Windows, чтобы иметь возможность создать исполняемый файл Linux). Вы должны сделать компиляцию непосредственно на машине с Linux. - person LaintalAy; 18.04.2016
comment
Спасибо за вашу помощь! Я мог бы создать отдельный bin-файл с Linux-машины. - person Vinay Gudisagar; 20.04.2016
comment
Вы должны сначала указать информацию, что это действительно невозможно, как просили (с этой машины Windows). - person Tilman Vogel; 07.04.2017