«Неустранимая ошибка: файл« EXTERN.h »не найден» при установке модулей Perl » - PullRequest
0 голосов
/ 06 октября 2018

При попытке установить модули Perl, такие как JSON :: XS или YAML :: XS, я получаю ту же ошибку:

XS.xs: 1: 10: фатальная ошибка: 'EXTERN.h'файл не найден

Я использую MacBook, xCode обновлен, все остальное, что может помочь, также актуально.

Просьба отправить справку.

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

После прочтения https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes#3035624 и установки дополнительных заголовков из /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Я успешно скомпилировал без отсутствующей ошибки «EXTERN.h»

0 голосов
/ 25 октября 2018

Начиная с OS X El Capitan, Apple представила Защита целостности системы , которая ограничивает запись в / usr / lib / usr / bin и другие конфиденциальные каталоги (даже для пользователя root или sudo), которые используются при установкеPerl в комплекте с операционной системой.Это может вызвать проблемы при установке новых модулей, а также при попытке установить модули XS (связанные с внешними библиотеками C).

По этой причине не следует рассматривать установку Perl по умолчанию в качестве рабочей среды разработки.особенно если вы устанавливаете пользовательские модули.

Ознакомьтесь с этой веткой на PM и другими.С тех пор, как El-Capitan удалось решить эту проблему, вручную создав из tarball и добавив несколько параметров или переменных окружения, чтобы указать пути, полагая, что было бы лучше сохранить использование системного Perl, но это не тот путь.Это усложняет построение вашей среды, но также является хрупким и чувствительным к обновлениям ОС, которые могут либо ломать вещи разными способами.

Лучше всего начинать с Perl, использующего brew install perl, и работать в этой среде.не забудьте настроить ваш bash_profile в соответствии с указаниями установщика.

Также стоит помнить, чтобы сделать brew link perl.Если вы получаете предупреждения об этом забивании, то, что похоже на системные библиотеки Perl, не беспокойтесь - это скорее всего модули, которые вы установили поверх, и это избавит вас от проблем связываться с ними.Если у вас есть проблемы, запишите, какие установки модуля будут очищены, и переустановите их после настройки среды (т. Е. Подход к установке вашего модуля настроен с использованием cpanm или со старым perl -MCPAN -e shell и т. Д.)

Эта новая настройка Perl из brew устраняет необходимость в продолжении запуска sudo, который добавляет еще один слой вещей, которые могут пойти не так, как переменные среды не выполняются, возникают конфликты разрешений и т. Д.

Наконец, чтобы упростить пакет/ модуль установки я предлагаю сделать brew install cpanminus.Если вы ранее уже установили это, вы можете убедиться, что пути и т. Д. Настроены, выполнив brew reinstall cpanminus

Если вы хотите сделать еще один шаг вперед, вы также можете установить perlbrew, который даст вам возможностьзапускать несколько версий Perl в качестве своего пользователя и настраивать их со своими собственными библиотеками и модулями, что может быть очень полезно, особенно при настройке на производственную среду для тестирования и т. д.

Одна проблема, с которой вы можете столкнуться при переходе из системного Perlдля такого подхода необходимо иметь дело с любыми похмелья при установке вещей с помощью sudo.Тем не менее, стоит потратить немного времени на то, чтобы все настроить правильно, и ваши проблемы в будущем будут значительно уменьшены, и у вас не останется этого мучительного чувства, что вы не хотите ничего менять, опасаясь, что все это сломается..

Я также натолкнулся на статью в блоге Perl, в которой предлагается исправление проблем XS с perlbrew в Mojave

В этом Gist описывается обновление вашегоcpan shell устанавливает root, хотя в этом нет необходимости, если ваш cpan не застрял в старой конфигурации после выполнения описанных выше шагов.

Я также поднял это как новую проблему на PerlMonks

...