2009-02-27 6 views
4

Я использовал PAR :: Packer для упаковки своего приложения Perl на Cygwin, а затем запускал его на HPUX.Почему PAR не может найти загружаемый объект для Socket.pm?

Простой привет мир работает хорошо, например .:

pp -p hello.pl 

Это приводит к a.par, а затем на HPUX:

parl a.par 

Он отлично работает.

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

Can't locate loadable object for module Socket in @INC 

Любые идеи, возможно, некоторые проблемы с Windows/Unix в сети? Какие-нибудь исправления?

+0

вашего второй редактировать мог быть размещены как ответ. Можно ответить на собственные вопросы :) – user55400

ответ

2
совет

Perl blixtor от комментариев я перемещающих «редактировать обновления» Я был в этом вопросе, чтобы ответить на мой собственный вопрос здесь:

Большая заслуга здесь идет Эндрю Барнетт, эти 2 ключевых вопросов были

  1. родной код C библиотека
  2. Perl-LIB пути

Здесь были шаги, которые я затем, чтобы получить Cygwin созданный пар для запуска на HPUX, я Бел ieve шаги должны быть примерно одинаковым на любой UNIX:

последовал совету Андрея и удалены IO :: Socket с розеткой переключатель с -X IO ::, но затем запустить полученный pärl на UNIX я получаю немного изменен, но до сих пор связанной с ошибкой:

Can't locate Socket.pm in @INC (@INC contains: CODE(0x406ab018) CODE(0x4055c880) CODE(0x40563978)) at Net/Config.pm line 11 

даже если работает «Perl -MCPAN -e оболочки» на UNIX показал оправа должна быть установлена ​​и до настоящего времени:

cpan[2]> install IO::Socket 
IO::Socket is up to date (1.30_01). 

Таким образом, в дополнение к за исключением гнезда с - X переключатель abobe, Я также должен был создать сценарий оболочки на HPUX именно с этой 1 линией в, wrapper.pl:

use PAR { file => 'bdiff.par', run => 'bdiff.pl' }; 

затем запустить это я не использовал pärl, вместо этого я бы просто назвать его с Perl и I пришлось поставить целые пути к Lib путей по умолчанию с -I переключатель, как это:

perl -I/lib/perl5/lib/5.10.0/PA-RISC2.0 -I/lib/lib/site_perl wrapper.pl allparameters 

по какой-то причине при использовании pärl, кажется, что Lib пути по умолчанию получить исключены, поэтому полные пути выше.

5

Вы нажимаете это, потому что Socket загружает общую библиотеку, и это не переносится на разных платформах (то есть, разделяемая библиотека Socket для Windows не будет работать на Linux, не будет работать на HPUX).

Вы можете попробовать две вещи:

  1. Определить все места, которые вы должны разделяемым библиотекам, и есть родной установить их на целевой платформе. Вам также может потребоваться исключить эти модули из вашего архива PAR.
  2. Перейдите к реализациям pure-Perl (которые являются (более) переносимыми). Если вы не виз в Perl, C и вашей целевой платформе, а версия pure-Perl еще не доступна, вам может быть не повезло.
+0

Спасибо, проблема с собственным кодом имеет смысл, вероятно, не так много модулей, кроме этого Socket, в котором содержится собственный код, поэтому я попробую первый подход. Есть ли простой способ сканирования зависимостей и печати тех, которые содержат собственный код? –

+0

Я не могу придумать особенно простой способ сканирования зависимостей. Вы можете поместить coderef в @INC и попытаться перехватить вызовы Dynaloader, но вам, вероятно, лучше с чем-то вроде Module :: Info (который, если я помню, требуется для PAR уже). –

+0

Посмотрите мое обновление выше, по какой-то причине по-прежнему получая сообщение об ошибке, есть ли переключатель, который мне нужно добавить в parl во время выполнения на HPUX, чтобы он также выглядел в его библиотечном пути по умолчанию? –

2

Преимущество установки фактического perl на вашем HPUX заключается в том, что ваше приложение cygwin может работать на hpux perl. Пакеты PAR обычно не работают между любыми двумя платформами. На мой взгляд, это не совсем так, как создание hello.exe на cygwin и попытка запустить его на HPUX.

0

FWIW, PAR не предназначен для портативных разнятся для различных платформ - не ожидает, что номинальная пакет, созданную на Cygwin для запуска на Linux/HPUX ....

Смежные вопросы