perlmacosx
СОДЕРЖАНИЕ
НАЗВАНИЕ
perlmacosx - Perl под Mac OS X
СИНОПСИС
Этот документ кратко описывает Perl под Mac OS X.
curl -O https://www.cpan.org/src/perl-5.34.0.tar.gz
tar -xzf perl-5.34.0.tar.gz
cd perl-5.34.0
./Configure -des -Dprefix=/usr/local/
make
make test
sudo make install ОПИСАНИЕ
Последняя версия Perl (5.34.0 на момент написания) компилируется без изменений под всеми версиями Mac OS X начиная с 10.3 "Panther".
Для компиляции собственной версии Perl вам понадобится 'make', который входит в состав инструментов разработчика Apple - также известный как Xcode. Начиная с Mac OS X 10.7 "Lion", его можно загрузить отдельно в виде пакета 'Инструменты командной строки' напрямую с https://developer.apple.com/downloads/ (вам понадобится бесплатная учетная запись для входа), или в составе комплекта Xcode, доступного бесплатно в App Store. Xcode - довольно большой пакет, поэтому, если у вас его нет или вам он не нужен, рекомендуется загрузить пакет 'Инструменты командной строки' отдельно по ссылке выше. Если вы хотите сделать это внутри Xcode, перейдите в Xcode -> Preferences -> Downloads и выберите опцию 'Инструменты командной строки'.
Между Mac OS X 10.3 "Panther" и 10.6 "Snow Leopard" пакет 'Инструменты командной строки' назывался 'инструменты Unix' и обычно поставлялся на установочных дисках Mac OS.
Более ранние версии Mac OS X (10.2 "Jaguar" и более ранние) не включали полностью многопоточную libc, поэтому поддержка многопоточности не полностью поддерживается. Кроме того, более ранние версии включали ошибочную libdb, поэтому некоторые тесты DB_File известны тем, что не проходят на этих версиях.
Префикс установки
По умолчанию место установки для этой версии использует традиционную структуру каталогов UNIX в каталоге /usr/local. Это рекомендуемое местоположение для большинства пользователей, и оно оставит предоставленный Apple Perl и его модули без изменений.
Использование префикса установки '/usr' приведет к структуре каталогов, которая отражает стандартный Perl от Apple, с основными модулями, хранящимися в '/System/Library/Perl/${version}', модулями CPAN, хранящимися в '/Library/Perl/${version}', и добавлением '/Network/Library/Perl/${version}' в @INC для модулей, которые хранятся на файловом сервере и используются на многих компьютерах Mac.
Поддержка SDK
Во-первых, экспортируйте путь к SDK в среду разработки:
export SDK=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk Пожалуйста, убедитесь, что версия SDK (то есть числа перед '.sdk') соответствует вашей системе (в данном случае, Mac OS X 10.8 "Mountain Lion"), так как может быть установлено более одного SDK. Также убедитесь, что путь существует в вашей системе, и если нет, убедитесь, что SDK правильно установлен, так как он должен поставляться с пакетом 'Инструменты командной строки', упомянутым выше. Наконец, если у вас более старая система Mac OS X (10.6 "Snow Leopard" и ниже) с Xcode 4.2 или ниже, путь к SDK может быть чем-то вроде '/Developer/SDKs/MacOSX10.3.9.sdk'.
Вы можете использовать SDK, экспортировав некоторые дополнения к переменным конфигурации 'ccflags' и '..flags' Perl:
./Configure -Accflags="-nostdinc -B$SDK/usr/include/gcc \
-B$SDK/usr/lib/gcc -isystem$SDK/usr/include \
-F$SDK/System/Library/Frameworks" \
-Aldflags="-Wl,-syslibroot,$SDK" \
-de Поддержка универсальных бинарников
Примечание: Начиная с Mac OS X 10.6 "Snow Leopard", Apple поддерживает только устройства на базе Intel. Это означает, что вы можете смело пропустить этот раздел, если у вас нет более старого компьютера Apple, работающего на ppc, или вы не хотите создать бинарный файл perl с обратной совместимостью.
Вы можете скомпилировать perl как универсальный бинарник (созданный для ppc и intel). В Mac OS X 10.4 "Tiger" необходимо экспортировать вариант 'u' SDK:
export SDK=/Developer/SDKs/MacOSX10.4u.sdk Mac OS X 10.5 "Leopard" и выше не требуют варианта 'u'.
В дополнение к флагам компилятора, используемым для выбора SDK, добавьте флаги для создания универсального бинарника:
./Configure -Accflags="-arch i686 -arch ppc -nostdinc \
-B$SDK/usr/include/gcc \
-B$SDK/usr/lib/gcc -isystem$SDK/usr/include \
-F$SDK/System/Library/Frameworks" \
-Aldflags="-arch i686 -arch ppc -Wl,-syslibroot,$SDK" \
-de Помните, что эти параметры компилятора и компоновщика также будут использоваться при построении модулей CPAN. Для компиляции модулей XS в качестве универсального бинарника все библиотеки, к которым он обращается, должны также быть универсальными бинарниками. Системные библиотеки, которые Apple включает в 10.4u SDK, являются универсальными, но установленные пользователем библиотеки могут потребовать повторной установки в качестве универсальных бинарников.
Поддержка 64-битных PPC
Следуйте инструкциям в файле INSTALL, чтобы скомпилировать perl с поддержкой 64-битных целых чисел (use64bitint) или и 64-битных целых чисел, и 64-битного адресования (use64bitall). В последнем случае результирующий бинарник будет работать только на системах на базе G5.
Поддержка 64-битного адресования является экспериментальной: некоторые аспекты Perl могут быть опущены или содержать ошибки. Обратите внимание на сообщения, выводимые Configure для получения дополнительной информации. Используйте https://github.com/Perl/perl5/issues для отправки отчета о проблеме в случае возникновения трудностей.
При построении 64-битных модулей вы несете ответственность за обеспечение того, чтобы связанные внешние библиотеки и фреймворки предоставляли поддержку 64-битности: если этого нет, сборка модулей может казаться успешной, но попытки использовать модуль приведут к ошибкам динамической компоновки во время выполнения и последующим сбоям тестов. Вы можете использовать file для выявления архитектур, поддерживаемых библиотекой:
$ file libgdbm.3.0.0.dylib
libgdbm.3.0.0.dylib: Mach-O fat file with 2 architectures
libgdbm.3.0.0.dylib (for architecture ppc): Mach-O dynamically linked shared library ppc
libgdbm.3.0.0.dylib (for architecture ppc64): Mach-O 64-bit dynamically linked shared library ppc64 Обратите внимание, что эта проблема исключает компиляцию многих специфичных для Macintosh модулей CPAN (Mac::*), так как требуемые фреймворки Apple не предоставляют поддержку PPC64. Аналогично, загрузки из Fink или Darwinports вряд ли предоставят 64-битную поддержку; библиотеки должны быть пересобраны из исходного кода с соответствующими флагами компилятора и компоновщика. Для получения дополнительной информации см. руководство Apple по переходу на 64-битную архитектуру https://developer.apple.com/library/archive/documentation/Darwin/Conceptual/64bitPorting/transition/transition.html.
libperl и Пребиндинг
Mac OS X поставляется с динамически загружаемой libperl, но по умолчанию для этой версии компилируется статическая libperl. Причина этого - пребиндинг. Динамические библиотеки могут быть предварительно привязаны к определенному адресу в памяти, чтобы сократить время загрузки. Для этого необходимо знать расположение и размер всех ранее загруженных библиотек. Apple собирает эту информацию в рамках процесса сборки всей ОС, и поэтому легко имеет к ней доступ при создании Perl, но обычным пользователям нужно будет приложить немало усилий, чтобы получить информацию, необходимую для предварительной привязки.
Вы можете переопределить значение по умолчанию и создать общую libperl, если хотите (Configure ... -Duseshrplib).
С Mac OS X 10.4 "Tiger" и более поздними версиями штраф за производительность отсутствует для библиотек, не прошедших предварительную привязку. Более ранние версии будут иметь большее время загрузки, чем либо статическая библиотека, или предварительно связанная динамическая библиотека Apple.
Обновление Perl от Apple
Вкратце - не делайте этого, по крайней мере без очень веской причины. Ваши скрипты могут точно так же начинаться с "#!/usr/local/bin/perl", как и с "#!/usr/bin/perl". Скрипты, предоставленные Apple и другими третьими лицами в составе установочных пакетов и т.п., как правило, тестировались только с /usr/bin/perl, установленным Apple.
Если вы обнаружите необходимость обновления системного Perl, важно помнить о вопросе статических и динамических библиотек. Если вы обновитесь с помощью по умолчанию статической libperl, вы обнаружите, что динамическая libperl, поставляемая Apple, не будет удалена. Если обе библиотеки присутствуют, когда строится приложение, ссылающееся на libperl, ld по умолчанию будет ссылаться на динамическую библиотеку. Таким образом, если вам нужно заменить динамическую libperl Apple статической libperl, вам необходимо убедиться, что вы удалили старую динамическую библиотеку после установки обновления.
Известные проблемы
Если вы установили дополнительные библиотеки, такие как GDBM через Fink (то есть, у вас есть библиотеки в каталоге /sw/lib) или libdlcompat в /usr/local/lib, вам может потребоваться быть очень внимательными при выполнении Configure, чтобы не запутать Configure и Perl относительно библиотек, которые использовать. Эта путаница, например, проявится как ошибки "dyld" о проблемах с символами, например, во время "make test". Самый безопасный способ - запустить Configure как
Configure ... -Uloclibpth -Dlibpth=/usr/lib чтобы Configure обращал внимание только на системные библиотеки. Если у вас есть некоторые дополнительные каталоги библиотек, которые вы действительно хотите использовать (например, более новые библиотеки Berkeley DB в системах до Panther), добавьте их в libpth:
Configure ... -Uloclibpth -Dlibpth='/usr/lib /opt/lib' По умолчанию компиляция Perl в статическом виде может вызвать проблемы с сложными приложениями, такими как Tk: в этом случае рассмотрите возможность компиляции общего Perl
Configure ... -Duseshrplib но помните, что в этом случае есть затраты на запуск (см. выше "libperl и Пребиндинг").
Начиная с Tiger (Mac OS X 10.4), Apple поставляла нерабочие файлы локали для локали eu_ES (баскско-испанская). В предыдущих версиях Perl это приводило к ошибкам в тесте lib/locale. Эти ошибки были подавлены в текущей версии Perl, сделав тест игнорирующим нерабочую локаль. Если вам нужно использовать локаль eu_ES, обратитесь в службу поддержки Apple.
Cocoa
Есть два способа использования Cocoa из Perl. Модуль PerlObjCBridge от Apple, включённый в Mac OS X, может использоваться автономными скриптами для доступа к классам и объектам Foundation (т.е. не графическим).
Альтернативой является CamelBones, фреймворк, позволяющий получить доступ к классам и объектам как Foundation, так и AppKit, так что полные графические приложения могут быть построены на Perl. CamelBones можно найти на SourceForge, по адресу https://www.sourceforge.net/projects/camelbones/.
Начать с нуля
К сожалению, довольно легко случайно сильно сломать Perl Mac OS X. Если всё остальное не поможет, и вы действительно, РЕАЛЬНО, хотите начать с нуля и удалить даже установленный вами Perl от Apple (который каким-то образом стал повреждённым), следующие инструкции должны помочь. Пожалуйста, подумайте дважды, прежде чем следовать этим инструкциям: они очень похожи на проведение операции на вашем мозге самим себе. Без анестезии. Мы не будем исправлять вашу систему, если вы сделаете это.
Сначала удалите libperl.dylib:
# cd /System/Library/Perl/darwin/CORE
# rm libperl.dylib Затем удалите каждый файл .bundle, найденный в любом месте в папках:
/System/Library/Perl
/Library/Perl Вы можете найти их, например, так:
# find /System/Library/Perl /Library/Perl -name '*.bundle' -print После этого вы можете скопировать Perl с носителя вашей операционной системы (вам потребуется как минимум /System/Library/Perl и /usr/bin/perl), или перестроить Perl из исходного кода с Configure -Dprefix=/usr -Duseshrplib ПРИМЕЧАНИЕ: -Dprefix=/usr заменить системный Perl работает намного лучше с Perl 5.8.1 и более поздними версиями, в Perl 5.8.0 настройки были не совсем правильными.
"Pacifist" от CharlesSoft (https://www.charlessoft.com/) — удобный способ извлечь двоичные файлы Perl с носителя ОС, без необходимости переустановки всей ОС.
АВТОР
Этот файл README был написан Sherm Pendley <sherm@dot-app.org>, а затем обновлён Dominic Dunlop <domo@computer.org> и Breno G. de Oliveira <garu@cpan.org>. Рецепт «Начать с нуля» был предоставлен John Montbriand <montbriand@apple.com>.
ДАТА
Последнее изменение 2013-04-29.
© 1993–2021 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.34.0/perlmacosx