Squeak.ru - шаблоны программирования

Могу ли я повторно использовать модули, скомпилированные с другой сборкой Perl, но с тем же номером версии?

Перекрестное сообщение от 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, или мне придется перекомпилировать их все и распространить новый набор модулей?

30.01.2015

  • Почему не используются perlbrew и cpanm, они являются обычным решением для вашего типа настройки и обычно предотвращают эти проблемы. 30.01.2015
  • Короткий ответ: я унаследовал существующую инфраструктуру своего отдела. Однако не могли бы вы подробнее рассказать, как эти два модуля предотвращают возникшую у меня проблему? У меня сложилось впечатление, что perlbrew используется для управления разными сборками Perl на одной машине. Делает ли это каким-то образом модули Perl совместимыми в разных сборках? Кроме того, cpanm нам не особо нужен. У нас нет доступа к Интернету или какому-либо репозиторию CPAN с наших машин (поэтому мы вручную компилируем наши модули). Таким образом, перекомпиляция модулей для каждой новой сборки Perl потребовала бы создания всего с нуля. 30.01.2015
  • Мои чувства к вам звучат как действительно суровые условия работы. Как уже говорилось, perlbrew - это обычный способ использования пользовательских сборок perl в домашнем каталоге. И он настраивает cpanm для установки модулей для каждой версии perl. Поскольку вам не разрешено устанавливать из Интернета: вы можете настроить собственное локальное зеркало cpan с помощью pinto, darkpan или OrePan и использовать его как единственный вариант -M. Его использование будет заключаться в том, что вам нужно будет ввести только одну команду (cpanm --installdeps с соответствующим файлом META), и все модули будут установлены в нужном месте вашего @INC. 30.01.2015
  • Это локальное зеркало CPAN на самом деле кажется очень полезным, спасибо. Раньше я предлагал нечто подобное, но это не набирало обороты. Я буду продолжать попытки заставить наше текущее решение работать, но я исследую эти другие варианты как возможное альтернативное долгосрочное решение. 30.01.2015
  • И чтобы прояснить другим, как я загружаю модули на наши машины: я загружаю их с веб-сайта CPAN на свой терминал и scp пересылаю на свою машину сборки. Я распаковываю их там, собираю и затем распределяю в общую файловую систему. Следовательно, нет реального доступа к CPAN или Интернету с самих машин. 30.01.2015
  • perlmonks.org/?node_id=1115125 31.01.2015

Ответы:


1

Оказывается, ДА, вы можете повторно использовать модули, скомпилированные с разными сборками Perl с одинаковым номером версии. Уловка, как указано выше, состоит в том, чтобы создать свой localperl с флагами ./Configure как можно ближе к Perl вашей системы. Вы можете определить ./Configure флаги, которые использует Perl вашей системы, запустив perl -V. Затем вы должны использовать эти настройки с указанными выше флагами. Моя интуиция подсказывает, что -Dcc= и -Darchname= являются критически важными для соответствия, хотя у меня не было времени проверить это предположение.

Итак, в чем была моя проблема, если я уже сделал все это, а это все еще не работало? Все просто - тестовый сценарий! В моей строке shebang я все еще указывал на ошибочную сборку Perl, которую я скомпилировал ранее в тот же день! Ооо! Как только я указал скрипту на новую сборку со всеми дополнительными ./Configure параметрами, он заработал отлично и смог использовать все модули, созданные с помощью системного Perl.

11.02.2015
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...