Перекрестное сообщение от Perl Monks: http://www.perlmonks.org/?node_id=1115125
Моему отделу необходимо вручную скомпилировать свои модули Perl, которые затем он загружает в общую файловую систему сети, чтобы разработчики могли совместно использовать их. Наш текущий набор модулей был построен с использованием моей системы Perl, которая /usr/bin/perl -V
отображается как revision 5 version 10 subversion 1
.
Однако мы заинтересованы в создании отдельной копии Perl, которую мы также можем загрузить в сетевую файловую систему. Таким образом, мы не привязаны к использованию системы Perl на каждой из наших машин, которая может меняться от машины к машине. Этакий «центральный» Perl, который может быть стандартным для каждой машины.
Поэтому мне нужно было создать локальную копию Perl в моем домашнем каталоге. Я убедился, что установил ту же версию, что и моя системная Perl, perl-5.10.1
. Я сделал это, используя следующие Configure
, за которыми следовали простые _5 _, _ 6_, make install
:
./Configure -des -Dprefix=/home/myuser/localperl -Duserelocatableinc
-Dprefix
установил его в папку localperl
в моем домашнем каталоге, а флаг -Duserelocatableinc
сделал так, чтобы @INC изменился, если папка была перемещена (т. Е. Загружена в сетевую файловую систему).
Проблема возникает, когда я пытаюсь протестировать ее с помощью одного из моих сценариев, для которого требуется модуль из нашей библиотеки модулей Perl, созданных вручную. Я получаю следующую ошибку:
/home/myuser/localperl/bin/perl: symbol lookup error: .../auto/DBI/DBI.so: undefined symbol: Perl_Istack_sp_ptr
Очевидно, в моем сценарии используется общий модуль DBI, но возникают ошибки. Изучая Интернет, люди сказали, что мне нужно будет перекомпилировать модули, используя новую сборку Perl.
Однако эти два Perl являются одной и той же версией и были созданы на одной машине. Может ли кто-нибудь помочь мне лучше понять, что мешает этим модулям работать с моим локально созданным Perl? Я попытался перестроить локальный Perl, используя Configure
настройки, как можно ближе к машинному Perl, чтобы проверить, сработает ли это:
-Dversion=5.10.1
-Dmyhostname=localhost
-Dcc=gcc
-Dinc_version_list=5.10.0
-Darchname=x86_64-linux-thread-multi
-Dusethreads
-Duseithreads
-Duselargefiles
Пока это не остановило ошибку. Есть ли способ заставить мой локально собранный Perl работать с модулями, скомпилированными с машинным Perl, или мне придется перекомпилировать их все и распространить новый набор модулей?