Не удается установить XML::Parser на M1 Mac с доморощенным perl 5.32

Мой новый Mac на базе M1 имеет встроенную версию Perl от Apple, v5.28.2. Я использовал homebrew для установки последней версии perl, 5.32.0, и настроил параметр local::lib, чтобы модули cpan устанавливались в ~/perl5. Все это работает по большей части.

Но... Я не могу установить XML:Parser в этой конфигурации homebrew/local-lib. Я думаю, что XML::Parser установлен в базовой конфигурации Apple, но я действительно хочу иметь возможность обновлять Perl и устанавливать модули, поэтому я думаю, что эта конфигурация — правильный способ сделать это. Но МНОЖЕСТВО вещей требует XML::Parser.

Вот мои переменные среды, PATH и т. д.:

PERL5LIB=/Users/jim/perl5/lib/perl5
PERL_LOCAL_LIB_ROOT=/Users/jim/perl5
PERL_MB_OPT=--install_base "/Users/jim/perl5"
PERL_MM_OPT=INSTALL_BASE=/Users/jim/perl5

PATH=/Users/jim/perl5/bin:.:/Users/jim/Documents/scripts:/opt/homebrew/bin:/Developer/usr/bin:/System/Library/Frameworks/Python.framework/Versions/Current/bin:/Users/jim/Library/Python/2.7/bin:/Users/jim/perl5/bin:/Users/jim/go/bin:/Users/jim/.cargo/bin:/usr/local/bin:/bin:/usr/bin:/usr/sbin:/sbin:/usr/X11/bin

% /usr/bin/which -a perl
/opt/homebrew/bin/perl
/usr/bin/perl

% /usr/bin/which -a cpan
/Users/jim/perl5/bin/cpan
/opt/homebrew/bin/cpan
/Users/jim/perl5/bin/cpan
/usr/bin/cpan

Бег cpan install XML::Parser дает:

Running make test for TODDR/XML-Parser-2.46.tar.gz
"/opt/homebrew/Cellar/perl/5.32.0/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- Expat.bs ../blib/arch/auto/XML/Parser/Expat/Expat.bs 644
Manifying 1 pod document
PERL_DL_NONLAZY=1 "/opt/homebrew/Cellar/perl/5.32.0/bin/perl" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/astress.t ........... 1/27
    Can't load '/Users/jim/.cpan/build/XML-Parser-2.46-0/blib/arch/auto
    /XML/Parser/Expat/Expat.bundle' for module XML::Parser::Expat:
    dlopen(/Users/jim/.cpan/build/XML-Parser-2.46-0/blib/arch/auto
    /XML/Parser/Expat/Expat.bundle, 2): Symbol not found: _XML_DefaultCurrent
  Referenced from: /Users/jim/.cpan/build/XML-Parser-2.46-0/blib/arch/auto/XML/Parser/Expat/Expat.bundle
  Expected in: flat namespace
 in /Users/jim/.cpan/build/XML-Parser-2.46-0/blib/arch/auto/XML/Parser/Expat/Expat.bundle at /opt/homebrew/Cellar/perl/5.32.0/lib/perl5/5.32.0/darwin-thread-multi-2level/DynaLoader.pm line 197.
 at /Users/jim/.cpan/build/XML-Parser-2.46-0/blib/lib/XML/Parser.pm line 18.
Compilation failed in require at /Users/jim/.cpan/build/XML-Parser-2.46-0/blib/lib/XML/Parser.pm line 18.
BEGIN failed--compilation aborted at /Users/jim/.cpan/build/XML-Parser-2.46-0/blib/lib/XML/Parser.pm line 22.
Compilation failed in require at t/astress.t line 11.
BEGIN failed--compilation aborted at t/astress.t line 11.
t/astress.t ........... Dubious, test returned 2 (wstat 512, 0x200)
Failed 27/27 subtests 

(Разрывы строк добавлены к сообщению об ошибке, чтобы сделать его читабельным.)

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

Какие-либо предложения?

Кстати, я удалил все содержимое локальной библиотеки в одной оболочке, протестировал установку простого модуля CPAN и увидел, как он устанавливается в области доморощенного. Сразу попытался установить XML::Parser и получил ту же ошибку. Итак, я не думаю, что это вообще связано с локальными библиотеками, просто комбинация доморощенного, кода этого модуля и, возможно, других вещей на Mac (что является новым, и в нем установлено только ПО с открытым исходным кодом на базе ARM). , никаких устаревших вещей x86).

jimtut 20.12.2020 19:54

Еще одно кстати: в исходном вопросе я сказал, что «думаю», что XML::Parser установлен в Perl от Apple. Должен сказать, что я знаю, что он установлен - я ясно вижу его в /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level/‌​XML/Parser.pm. И простой /usr/bin/perl -e "use XML::Parser" отлично работает. Как ни странно, этот каталог НЕ является частью моего @INC (который я проверил), и этот XML::Parser находится в каталоге 5.18, а не 5.28. Не уверен, как это работает при установке Apple с этой странной конфигурацией, но просто хотел уточнить этот момент выше. Основной вопрос по-прежнему касается хоумбрю.

jimtut 20.12.2020 20:59

Я использую macOS 11.1 Big Sur, использую perlbrew с версией perl 5.30.1. Я попробовал cpanm XML::Parser и тесты не прошли с той же ошибкой, которую вы описываете: Symbol not found: _XML_DefaultCurrent. Однако затем я попробовал исправить в Заставить DynaLoader на MacOS проверять наличие библиотеки с помощью dlopen, и здесь XML::Parser установилось нормально.

Håkon Hægland 20.12.2020 21:03

Big Sur изменил ситуацию и сломал один из установщиков модулей Perl. В результате этот -lexpat не используется (и вы, вероятно, получили очень неправильное предупреждение о том, что это «вероятно безвредно»), поэтому XML::Parser::Expat (часть XML::Parser) не связан с библиотека C, в которой он нуждается, поэтому он терпит неудачу.

ikegami 20.12.2020 21:09

@ikegami «В результате этот -lexpat не используется», да, похоже, это так. Я скачал XML-Parser-2.46.tar.gz и запустил perl Makefile.PL; make (используя perl 5.30.1 от perlbrew). Вывод показал, что cc -mmacosx-version-min=10.15 -bundle -undefined dynamic_lookup -L/usr/local/lib -fstack-protector-strong Expat.o -o ../blib/arch/auto/XML/Parser/Expat/Expat.bundle использовался для создания общего объекта. Если бы я добавил вручную -lexpat в конец предыдущей команды и выполнил ее, а затем запустил make test все тесты прошли здесь.

Håkon Hægland 21.12.2020 06:41

@jmtut Какую версию macOS вы используете?

Håkon Hægland 21.12.2020 06:41

@HåkonHægland, они сказали, что это M1, значит, это Биг-Сур, верно?

ikegami 21.12.2020 07:10

@ikegami «они сказали, что это M1» Хорошо, отлично, тогда у ОП, вероятно, та же проблема, что и у меня. Я попробовал perl Makefile.PL; make с perl 5.33.5 и могу подтвердить, что эта версия добавляет -lexpat, так что это объясняет, почему он работает с этой версией. Но я пока не могу найти фактическую фиксацию, реализующую исправление. Я думал, что это будет в PR 18407, но, возможно, это было исправлено ранее.

Håkon Hægland 21.12.2020 07:31

@HåkonHægland Конечно. Мой предыдущий комментарий был объяснением вашего.

ikegami 21.12.2020 07:32

@HåkonHægland Разве вы не создали свой 5.33.5 с помощью git fetch origin pull/18407/head:bigsur3?

ikegami 21.12.2020 07:38

@ikegami Да, я сделал

Håkon Hægland 21.12.2020 07:40

@HåkonHægland Так что да, это PR 18407

ikegami 21.12.2020 08:16

@jimtut Вот в чем проблема. Я не закрываюсь как дубликат, потому что может быть возможно взломать что-то, чтобы вы могли установить свой модуль, но это выше моих возможностей, поскольку у меня нет доступа к Mac. (Не знаю, как вам вообще удалось установить Perl.)

ikegami 21.12.2020 08:19

Извините, ребята, я спал, когда приходили все эти замечательные комментарии. Да, я управляю Big Sur. Perl был установлен через Homebrew под 11.0 (без проблем, и он отлично работает как собственный (ARM) исполняемый файл. С тех пор я обновился до 11.1, и это был первый раз, когда я попытался установить XML::Parser. Я попробую ваш предложения сегодня вечером!

jimtut 21.12.2020 14:06

Спасибо за все комментарии и помощь - я люблю это сообщество! Я принял ответ Леона, поскольку это был самый простой способ достичь моей цели (и это был единственный фактический ответ), но я ценю всю работу, которую вы, ребята, делаете здесь и поддерживаете работу Perl! :-)

jimtut 21.12.2020 21:14
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
15
2 039
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Установка последней бета-версии ExtUtils::MakeMaker (7.57_02) должна решить вашу проблему. Вероятно, скоро он будет выпущен как стабильная версия.

ETA: 7.58 уже выпущен.

Согласно моим тестам на Big Sur (см. комментарий выше), исправление заключалось в добавлении -lexpat к флагам компоновщика. Какая часть (коммит) этого выпуска вводит (добавляет) флаг компоновщика -lexpat для Makefile?

Håkon Hægland 21.12.2020 19:51

Изменение ExtUtils::Liblist::Kid (8b924f65 и 21a441da)

Leon Timmermans 21.12.2020 20:03

Спасибо, теперь я вижу, DynaLoader::dl_load_file() используется для проверки существования библиотеки.

Håkon Hægland 21.12.2020 20:16

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