Spec-Zone.ru › Perl 5.36

perlmacosx

СОДЕРЖАНИЕ

  • ИМЯ
  • СИНОПСИС
  • ОПИСАНИЕ
    • Префикс установки
    • Поддержка SDK
    • Поддержка универсального двоичного файла
    • Поддержка 64-битного PPC
    • libperl и предварительная привязка
    • Обновление Perl от Apple
    • Известные проблемы
    • Cocoa
  • Начинать с нуля
  • АВТОР
  • ДАТА

ИМЯ

perlmacosx - Perl под Mac OS X

СИНОПСИС

В данном документе кратко описывается Perl под Mac OS X.

curl -O https://www.cpan.org/src/perl-5.36.0.tar.gz
tar -xzf perl-5.36.0.tar.gz
cd perl-5.36.0
./Configure -des -Dprefix=/usr/local/
make
make test
sudo make install

ОПИСАНИЕ

Последняя версия Perl (5.36.0 на момент написания) компилируется без изменений под всеми версиями Mac OS X начиная с 10.3 "Panther".

Для компиляции собственной версии Perl вам потребуется 'make', который входит в инструменты для разработчиков Apple - также известные как Xcode. Начиная с Mac OS X 10.7 "Lion", его можно скачать отдельно в виде пакета 'Command Line Tools' напрямую с https://developer.apple.com/downloads/ (вам потребуется бесплатная учетная запись для входа) или в составе комплекта Xcode, свободно доступного в App Store. Xcode - довольно большой приложение, поэтому, если у вас его нет или вы не хотите его устанавливать, рекомендуется скачать пакет 'Command Line Tools' отдельно по ссылке выше. Если вы хотите сделать это через Xcode, перейдите в Xcode -> Preferences -> Downloads и выберите опцию 'Command Line Tools'.

Между Mac OS X 10.3 "Panther" и 10.6 "Snow Leopard" пакет 'Command Line Tools' назывался 'unix tools' и обычно поставлялся на установочных DVD дисков Mac OS.

Более ранние версии Mac OS X (10.2 "Jaguar" и более ранние) не включали полностью потокобезопасную libc, поэтому поддержка многопоточности не полностью поддерживается. Также, более ранние версии содержали ошибочную libdb, поэтому некоторые тесты DB_File известны тем, что они не проходят на этих версиях.

Префикс установки

По умолчанию место установки для этой версии использует традиционную UNIX структуру каталогов в /usr/local. Это рекомендуемое место для большинства пользователей, и оно оставит Perl и его модули, поставляемые Apple, нетронутыми.

Использование префикса установки '/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 правильно установлен, так как он должен поставляться с пакетом 'Command Line Tools', упомянутым выше. Наконец, если у вас более старая 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 включает в SDK 10.4u, являются универсальными, но пользовательские библиотеки, возможно, необходимо переустановить как универсальные двоичные файлы.

Поддержка 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-битность; библиотеки должны быть пересобраны из исходного кода с соответствующими флагами компилятора и компоновщика. Для получения дополнительной информации см. Руководство по переходу на 64-разрядную архитектуру Apple по адресу 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 статической, вам нужно убедиться, что вы удалите более старую динамическую библиотеку после установки обновления.

Известные проблемы

Если вы установили дополнительные библиотеки, такие как 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 locale (баскский - Испания). В предыдущих версиях Perl это приводило к ошибкам в тесте lib/locale. В текущей версии Perl эти ошибки были подавлены, сделав тест игнорирующим неисправную локаль. Если вам необходимо использовать локаль eu_ES, вы должны связаться с службой поддержки Apple.

Cocoa

Есть два способа использования Cocoa из Perl. Модуль Apple's PerlObjCBridge, включенный в 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@dot-app.org>, а затем обновлён Домиником Данлопом <domo@computer.org> и Брено Г. де Оливейрой <garu@cpan.org>. Рецепт «Начиная с нуля» был внесён Джоном Монтбрианом <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.36.0/perlmacosx

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API