Spec-Zone.ru › Perl 5.32

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

ОПИСАНИЕ

Последняя версия Perl (5.32.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' и обычно поставлялся на установочных DVD дисках Mac OS.

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

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

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

Использование префикса установки '/usr' приведет к структуре каталогов, отражающей стандартную структуру Apple Perl, с основными модулями, хранящимися в '/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–2020 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.32.0/perlmacosx

Spec-Zone.ru

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