Не удается установить 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
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
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

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