Spec-Zone.ru › Perl 5.38

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.38.0.tar.gz
tar -xzf perl-5.38.0.tar.gz
cd perl-5.38.0
./Configure -des -Dprefix=/usr/local/
make
make test
sudo make install

ОПИСАНИЕ

Последняя версия Perl (5.38.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 —> Настройки —> Загрузки и выберите опцию 'Инструменты командной строки'.

Между Mac OS X 10.3 «Panther» и 10.6 «Snow Leopard» пакет 'Инструменты командной строки' назывался 'unix tools' и обычно поставлялся на диске 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}', а дополнительно в @INC будет добавлен '/Network/Library/Perl/${version}' для модулей, хранящихся на файловом сервере и используемых на многих компьютерах 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, экспортировав некоторые дополнения к переменным конфигурации Perl 'ccflags' и '..flags':

./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

Обратите внимание, что эта проблема препятствует созданию многих модулей CPAN для Macintosh (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–2023 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.38.0/perlmacosx

Spec-Zone.ru

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