Spec-Zone.ru › Perl 5.34

perlhpux

СОДЕРЖАНИЕ

  • ИМЯ
  • ОПИСАНИЕ
    • Использование perl, поставляемого с HP-UX
    • Использование perl из портальной системы HP
    • Другие предварительно скомпилированные двоичные файлы perl
    • Компиляция Perl 5 на HP-UX
    • PA-RISC
    • PA-RISC 1.0
    • PA-RISC 1.1
    • PA-RISC 2.0
    • Переносимость между версиями PA-RISC
    • Семейство процессоров Itanium (IPF) и HP-UX
    • Itanium, Itanium 2 и Madison 6
    • Версии HP-UX
    • Создание динамических расширений на HP-UX
    • Компилятор HP ANSI C
    • Компилятор GNU C
    • Использование больших файлов с Perl на HP-UX
    • Потоковый Perl на HP-UX
    • 64-битный Perl на HP-UX
    • Oracle на HP-UX
    • GDBM и потоки на HP-UX
    • NFS-файловые системы и utime(2) на HP-UX
    • Параметры ядра HP-UX (maxdsiz) для компиляции Perl
  • nss_delete дамп памяти из op/pwent или op/grent
  • ошибка: склейка ")" и "l" не даёт допустимого препроцессорного токена
  • Переопределение "sendpath" с другим спецификатором класса хранения
  • Разное
  • АВТОР

ИМЯ

perlhpux - Perl версия 5 на системах Hewlett-Packard Unix (HP-UX)

ОПИСАНИЕ

В этом документе описываются различные особенности операционной системы Unix HP (HP-UX), которые повлияют на то, как будет компилироваться и/или работать Perl версии 5 (далее просто Perl).

Использование perl, поставляемого с HP-UX

Выпуск приложения сентябрь 2001 г., HP-UX 11.00 - первая версия, поставляемая с Perl. К тому времени это был perl-5.6.1 в /opt/perl. Первый экземпляр находится на CD 5012-7954 и может быть установлен с помощью

swinstall -s /cdrom perl

предполагая, что этот CD смонтирован на /cdrom.

Данная сборка была портативной hppa-1.1 многопоточной сборкой, поддерживающей большие файлы, скомпилированные с помощью gcc-2.9-hppa-991112.

Если вы выполните новую установку, то будет автоматически установлен (более новый) Perl. В предварительно установленных системах HP-UX теперь доступны более новые версии Perl и обновленные модули.

Официальные (многопоточные) сборки от HP, поставляемые на DVD/CD приложения, доступны по адресу http://www.software.hp.com/portal/swdepot/displayProductInfo.do?productNumber=PERL для PA-RISC и IPF (Itanium Processor Family). Они скомпилированы с помощью компилятора HP ANSI-C. До версии 5.8.8 это делала компания ActiveState.

Чтобы увидеть, какая версия включена в DVD (предполагается, что он смонтирован на /cdrom), выполните эту команду:

# swlist -s /cdrom perl
# perl           D.5.8.8.B  5.8.8 Perl Programming Language
  perl.Perl5-32  D.5.8.8.B  32-bit 5.8.8 Perl Programming Language
                                         with Extensions
  perl.Perl5-64  D.5.8.8.B  64-bit 5.8.8 Perl Programming Language
                                         with Extensions

Чтобы увидеть, что установлено в вашей системе:

# swlist -R perl
# perl                    E.5.8.8.J  Perl Programming Language
# perl.Perl5-32           E.5.8.8.J  32-bit Perl Programming Language
                                     with Extensions
  perl.Perl5-32.PERL-MAN  E.5.8.8.J  32-bit Perl Man Pages for IA
  perl.Perl5-32.PERL-RUN  E.5.8.8.J  32-bit Perl Binaries for IA
# perl.Perl5-64           E.5.8.8.J  64-bit Perl Programming Language
                                     with Extensions
  perl.Perl5-64.PERL-MAN  E.5.8.8.J  64-bit Perl Man Pages for IA
  perl.Perl5-64.PERL-RUN  E.5.8.8.J  64-bit Perl Binaries for IA

Использование perl из портальной системы HP

Центр портирования HP пытается удовлетворить требования клиентов и выпускать обновления из сообщества с открытым исходным кодом. Наличие предварительно скомпилированных двоичных файлов Perl очевидно, хотя «актуальность» - понятие относительное. На момент написания этого документа были доступны perl-5.10.1 и 5.28.0.

Центры портирования HP ограничены в выборе систем, для которых они могут производить портирование, и обычно выбирают две последние доступные версии ОС.

Компания HP попросила центр портирования перенести двоичные файлы Open Source из /opt в /usr/local, поэтому двоичные файлы, созданные с начала июля 2002 года, расположены в /usr/local.

Один из URL-адресов центров портирования HP - http://hpux.connect.org.uk/. Текущий порт скомпилирован с помощью GNU gcc. Поскольку портирование современного GNU gcc на HP-UX чрезвычайно сложно, они застряли на версии gcc-4.2.3.

Другие предварительно скомпилированные двоичные файлы perl

Чтобы получить больше репозиториев Perl для всего диапазона HP-UX, посетите сайт H.Merijn Brand по адресу http://mirrors.develooper.com/hpux/#Perl. Внимательно прочтите заметки, чтобы убедиться, что доступные версии соответствуют вашим потребностям.

Компиляция Perl 5 на HP-UX

При компиляции Perl необходимо использовать компилятор ANSI C. Компилятор C, поставляемый со всеми системами HP-UX, является компилятором K&R и должен использоваться только для сборки новых ядер.

Perl можно скомпилировать с помощью либо компилятора ANSI C HP, либо с помощью gcc. Рекомендуется использовать первый, так как он не только может скомпилировать Perl без проблем, но и может использовать перечисленные ниже особенности, которые требуют использования флагов командной строки, специфичных для компилятора HP.

Если вы решите использовать gcc, убедитесь, что ваша установка является современной и полной, и обязательно прочтите файл INSTALL Perl для получения дополнительных сведений, специфичных для gcc.

PA-RISC

Последняя и окончательная версия PA-RISC - 2.0, HP больше не продаёт системы с этими процессорами.

Системы HP9000 Unix работают на собственном чипе HP Precision Architecture (PA-RISC). Раньше HP-UX работал на семействе чипов Motorola MC68000, но любые машины с этим чипом достаточно устарели, и этот документ не будет пытаться решить вопросы компиляции Perl на чипах Motorola. Несмотря на то, что аппаратное обеспечение PA-RISC больше не продаётся, во многих местах по-прежнему можно найти машины, работающие на этих процессорах.

Последняя дата заказа систем HP 9000 - 31 декабря 2008 года.

Системы HP PA-RISC обычно обозначаются описанием модели «HP 9000». Последний процессор в этой серии - PA-8900. Поддержка машин с архитектурой PA-RISC официально завершилась, как показано в следующей таблице:

  PA-RISC End-of-Life Roadmap
+--------+----------------+----------------+-----------------+
| HP9000 | Superdome      | PA-8700        | Spring 2011     |
| 4-128  |                | PA-8800/sx1000 | Summer 2012     |
| cores  |                | PA-8900/sx1000 | 2014            |
|        |                | PA-8900/sx2000 | 2015            |
+--------+----------------+----------------+-----------------+
| HP9000 | rp7410, rp8400 | PA-8700        | Spring 2011     |
| 2-32   | rp7420, rp8420 | PA-8800/sx1000 | 2012            |
| cores  | rp7440, rp8440 | PA-8900/sx1000 | Autumn 2013     |
|        |                | PA-8900/sx2000 | 2015            |
+--------+----------------+----------------+-----------------+
| HP9000 | rp44x0         | PA-8700        | Spring 2011     |
| 1-8    |                | PA-8800/rp44x0 | 2012            |
| cores  |                | PA-8900/rp44x0 | 2014            |
+--------+----------------+----------------+-----------------+
| HP9000 | rp34x0         | PA-8700        | Spring 2011     |
| 1-4    |                | PA-8800/rp34x0 | 2012            |
| cores  |                | PA-8900/rp34x0 | 2014            |
+--------+----------------+----------------+-----------------+

Полный список моделей на момент сборки ОС находится в файле /usr/sam/lib/mo/sched.models. Первый столбец соответствует последней части вывода команды «model». Второй столбец - версия PA-RISC, а третий столбец - точный тип используемого чипа. (Начните просмотр с низа, чтобы избежать путаницы ;-)

# model
9000/800/L1000-44
# grep L1000-44 /usr/sam/lib/mo/sched.models
L1000-44        2.0     PA8500

PA-RISC 1.0

Оригинальная версия PA-RISC, HP больше не продаёт системы с этим чипом.

Следующие системы содержали чипы PA-RISC 1.0:

600, 635, 645, 808, 815, 822, 825, 832, 834, 835, 840, 842, 845, 850,
852, 855, 860, 865, 870, 890

PA-RISC 1.1

Обновление дизайна PA-RISC, оно поставлялось в течение многих лет на многих разных системах.

Следующие системы содержат чипы PA-RISC 1.1:

705, 710, 712, 715, 720, 722, 725, 728, 730, 735, 742, 743, 744, 745,
747, 750, 755, 770, 777, 778, 779, 800, 801, 803, 806, 807, 809, 811,
813, 816, 817, 819, 821, 826, 827, 829, 831, 837, 839, 841, 847, 849,
851, 856, 857, 859, 867, 869, 877, 887, 891, 892, 897, A180, A180C,
B115, B120, B132L, B132L+, B160L, B180L, C100, C110, C115, C120,
C160L, D200, D210, D220, D230, D250, D260, D310, D320, D330, D350,
D360, D410, DX0, DX5, DXO, E25, E35, E45, E55, F10, F20, F30, G30,
G40, G50, G60, G70, H20, H30, H40, H50, H60, H70, I30, I40, I50, I60,
I70, J200, J210, J210XC, K100, K200, K210, K220, K230, K400, K410,
K420, S700i, S715, S744, S760, T500, T520

PA-RISC 2.0

Самое последнее обновление дизайна PA-RISC, оно добавило поддержку 64-битных целочисленных данных.

На момент последнего обновления этого документа следующие системы содержат чипы PA-RISC 2.0:

700, 780, 781, 782, 783, 785, 802, 804, 810, 820, 861, 871, 879, 889,
893, 895, 896, 898, 899, A400, A500, B1000, B2000, C130, C140, C160,
C180, C180+, C180-XP, C200+, C400+, C3000, C360, C3600, CB260, D270,
D280, D370, D380, D390, D650, J220, J2240, J280, J282, J400, J410,
J5000, J5500XM, J5600, J7000, J7600, K250, K260, K260-EG, K270, K360,
K370, K380, K450, K460, K460-EG, K460-XP, K470, K570, K580, L1000,
L2000, L3000, N4000, R380, R390, SD16000, SD32000, SD64000, T540,
T600, V2000, V2200, V2250, V2500, V2600

Непосредственно перед тем, как HP приобрела Compaq, некоторые системы были переименованы. Ссылка, содержащая объяснение, не работает, поэтому вот краткий обзор:

HP 9000 A-Class servers, now renamed HP Server rp2400 series.
HP 9000 L-Class servers, now renamed HP Server rp5400 series.
HP 9000 N-Class servers, now renamed HP Server rp7400.

rp2400, rp2405, rp2430, rp2450, rp2470, rp3410, rp3440, rp4410,
rp4440, rp5400, rp5405, rp5430, rp5450, rp5470, rp7400, rp7405,
rp7410, rp7420, rp7440, rp8400, rp8420, rp8440, Superdome

Текущая система именования:

aadddd
||||`+- 00 - 99 relative capacity & newness (upgrades, etc.)
|||`--- unique number for each architecture to ensure different
|||     systems do not have the same numbering across
|||     architectures
||`---- 1 - 9 identifies family and/or relative positioning
||
|`----- c = ia32 (cisc)
|       p = pa-risc
|       x = ia-64 (Itanium & Itanium 2)
|       h = housing
`------ t = tower
        r = rack optimized
        s = super scalable
        b = blade
        sa = appliance

Переносимость между версиями PA-RISC

Исполняемый файл, скомпилированный на платформе PA-RISC 2.0, не будет выполняться на платформе PA-RISC 1.1, даже если они работают с одной и той же версией HP-UX. Если вы компилируете Perl на платформе PA-RISC 2.0 и хотите, чтобы этот Perl работал также на платформе PA-RISC 1.1, должны использоваться флаги компилятора +DAportable и +DS32.

Теперь уже невозможно скомпилировать исполняемые файлы PA-RISC 1.0 ни на платформах PA-RISC 1.1, ни на 2.0. Флаги командной строки принимаются, но полученный исполняемый файл не будет работать при переносе на систему PA-RISC 1.0.

Семейство процессоров Itanium (IPF) и HP-UX

HP-UX также работает на более новых процессорах Itanium. Это требует использования версии HP-UX 11.23 (11i v2) или 11.31 (11i v3), и за исключением нескольких различий, подробно описанных ниже и в последующих разделах, Perl должен компилироваться без проблем.

Хотя двоичные файлы PA-RISC могут работать на системах Itanium, не следует пытаться использовать версию Perl PA-RISC на системе Itanium. Это связано с тем, что общие библиотеки, созданные на системе Itanium, не могут быть загружены при работе исполняемого файла PA-RISC.

Системы HP Itanium 2 обычно обозначаются описанием модели «HP Integrity».

Itanium, Itanium 2 и Madison 6

HP также поставляет серверы с 128-битным процессором Itanium. cx26x0, как сообщается, имеет Madison 6. На момент последнего обновления этого документа следующие системы содержат чипы Itanium или Itanium 2 (это может быть устаревшим):

BL60p, BL860c, BL870c, BL890c, cx2600, cx2620, rx1600, rx1620, rx2600,
rx2600hptc, rx2620, rx2660, rx2800, rx3600, rx4610, rx4640, rx5670,
rx6600, rx7420, rx7620, rx7640, rx8420, rx8620, rx8640, rx9610,
sx1000, sx2000

Чтобы узнать всё о вашей машине, введите

# model
ia64 hp server rx2600
# /usr/contrib/bin/machinfo

Версии HP-UX

Не все архитектуры (PA = PA-RISC, IPF = семейство процессоров Itanium) поддерживают все версии HP-UX, вот короткий список

HP-UX version  Kernel  Architecture End-of-factory support
-------------  ------  ------------ ----------------------------------
10.20          32 bit  PA           30-Jun-2003
11.00          32/64   PA           31-Dec-2006
11.11  11i v1  32/64   PA           31-Dec-2015
11.22  11i v2     64        IPF     30-Apr-2004
11.23  11i v2     64   PA & IPF     31-Dec-2015
11.31  11i v3     64   PA & IPF     31-Dec-2020 (PA) 31-Dec-2025 (IPF)

Полный список поддержки оборудования/ОС и ожидаемого срока службы смотрите по ссылке https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf

Создание динамических расширений на HP-UX

HP-UX поддерживает динамически загружаемые библиотеки (динамические библиотеки). Динамические библиотеки оканчиваются суффиксом .sl. На системах Itanium они оканчиваются суффиксом .so.

Динамические библиотеки, созданные на платформе, использующей определённую версию PA-RISC, как правило, не могут использоваться на платформах, использующих более раннюю версию PA-RISC. Однако эта обратная совместимость может быть включена с помощью того же флага компилятора +DAportable (с тем же оговорённым выше ограничением для PA-RISC 1.0).

Общие библиотеки, созданные на платформе Itanium, не могут быть загружены на платформе PA-RISC. Общие библиотеки, созданные на платформе PA-RISC, могут быть загружены только на платформе Itanium, если это исполняемый файл PA-RISC, пытающийся загрузить библиотеку PA-RISC. Библиотека общего использования PA-RISC не может быть загружена в исполняемый файл Itanium, и наоборот.

Для создания библиотеки общего использования необходимо выполнить следующие шаги:

1. Compile source modules with +z or +Z flag to create a .o module
   which contains Position-Independent Code (PIC).  The linker will
   tell you in the next step if +Z was needed.
   (For gcc, the appropriate flag is -fpic or -fPIC.)

2. Link the shared library using the -b flag.  If the code calls
   any functions in other system libraries (e.g., libm), it must
   be included on this line.

(Обратите внимание, что эти шаги обычно обрабатываются автоматически файлом Makefile расширения).

Если эти зависимые библиотеки не указаны во время создания библиотеки общего использования, при её загрузке во время выполнения возникнут фатальные ошибки "Неразрешённый символ".

Вы можете создать библиотеку общего использования, которая ссылается на другую библиотеку, которая может быть либо библиотекой архива, либо библиотекой общего использования. Если эта вторая библиотека является библиотекой общего использования, это называется "зависимой библиотекой". Имя зависимой библиотеки записывается в основной библиотеке общего использования, но она не подключается в библиотеку общего использования. Вместо этого она загружается при загрузке основной библиотеки общего использования. Это может вызвать проблемы, если вы создаёте расширение на одной системе и перемещаете его на другую систему, где библиотеки могут находиться не в том же месте, что и на первой системе.

Если ссылаемая библиотека является библиотекой архива, то она обрабатывается как простое собрание модулей .o (все из которых должны содержать PIC). Затем эти модули подключаются в библиотеку общего использования.

Обратите внимание, что можно создать библиотеку, которая содержит зависимую библиотеку, уже подключённую к Perl.

Некоторые расширения, такие как DB_File и Compress::Zlib, используют/требуют предварительно созданных библиотек для работы расширений/модулей Perl. Если эти библиотеки построены с использованием стандартной конфигурации, может произойти ошибка, подобная "недопустимая корректировка загрузчика" во время фазы загрузки. HP осведомлен об этой проблеме. Поищите обсуждения по этой теме на форумах HP-UX cxx-dev. Короткий ответ заключается в том, что всё (все библиотеки, всё) должно быть скомпилировано с +z или +Z для того, чтобы быть PIC (независимый от позиции код). (Для gcc это было бы -fpic или -fPIC). В HP-UX 11.00 или более поздних версиях сообщение об ошибке линковщика должно указывать имя проблемного объектного файла.

Более общий подход заключается в ручном вмешательстве, как в примере для модуля DB_File, которому требуется SleepyCat's libdb.sl:

# cd .../db-3.2.9/build_unix
# vi Makefile
... add +Z to all cflags to create shared objects
CFLAGS=         -c $(CPPFLAGS) +Z -Ae +O2 +Onolimit \
                -I/usr/local/include -I/usr/include/X11R6
CXXFLAGS=       -c $(CPPFLAGS) +Z -Ae +O2 +Onolimit \
                -I/usr/local/include -I/usr/include/X11R6

# make clean
# make
# mkdir tmp
# cd tmp
# ar x ../libdb.a
# ld -b -o libdb-3.2.sl *.o
# mv libdb-3.2.sl /usr/local/lib
# rm *.o
# cd /usr/local/lib
# rm -f libdb.sl
# ln -s libdb-3.2.sl libdb.sl

# cd .../DB_File-1.76
# make distclean
# perl Makefile.PL
# make
# make test
# make install

Начиная с db-4.2.x, делать это вручную уже не нужно. Sleepycat изменили процесс конфигурации, чтобы автоматически добавлять +z в HP-UX.

# cd .../db-4.2.25/build_unix
# env CFLAGS=+DD64 LDFLAGS=+DD64 ../dist/configure

должно работать для генерации 64-битных библиотек общего использования для HP-UX 11.00 и 11i.

Больше нет возможности связывать библиотеки общего использования PA-RISC 1.0 (хотя флаги командной строки всё ещё присутствуют).

Объектные файлы PA-RISC и Itanium не взаимозаменяемы. Хотя вы можете использовать ar для создания архива библиотеки объектных файлов PA-RISC на системе Itanium, вы не можете связать с ним с помощью редактора связей Itanium.

Компилятор HP ANSI C

При использовании этого компилятора для сборки Perl, убедитесь, что флаг -Aa добавлен в переменные cpprun и cppstdin в файле config.sh (хотя см. раздел о 64-битной версии Perl ниже). Если вы используете последнюю версию дистрибутива Perl, эти флаги устанавливаются автоматически.

Несмотря на то, что HP-UX 10.20 и 11.00 больше не поддерживаются HP, обновления для компилятора HP ANSI C время от времени всё ещё доступны, и целесообразно проверить, есть ли применимые обновления. На момент написания этой документации, последние доступные исправления для 11.00, которые следует применить, — PHSS_35098, PHSS_35175, PHSS_35100, PHSS_33036 и PHSS_33902. Если у вас есть учётная запись SUM, вы можете использовать её для поиска обновлений/исправлений. В качестве ключевого слова введите «ANSI».

Компилятор GNU C

Если вы планируете использовать компилятор GNU C (gcc), и у вас его ещё нет, вы можете либо собрать его самостоятельно (если достаточно мазохистски настроены) из исходных кодов (доступных, например, на http://gcc.gnu.org/mirrors.html), либо получить предварительно собранный бинарник из портативного центра HP по адресу http://hpux.connect.org.uk/hppd/cgi-bin/search?term=gcc&Search=Search или из DSPP (вам нужно быть участником) по адресу http://h21007.www2.hp.com/portal/site/dspp/menuitem.863c3e4cbcdc3f3515b49c108973a801?ciid=2a08725cc2f02110725cc2f02110275d6e10RCRD&jumpid=reg_r1002_usen_c-001_title_r0001 (просмотрите список, так как часто доступны несколько версий одного и того же пакета).

Большинство упомянутых дистрибутивов являются хранилищами. H.Merijn Brand предоставил предварительно собранные двоичные файлы gcc по адресу http://mirrors.develooper.com/hpux/ и/или http://www.cmve.net/~merijn/ для HP-UX 10.20 (только 32 бита), HP-UX 11.00, HP-UX 11.11 (HP-UX 11i v1) и HP-UX 11.23 (HP-UX 11i v2 PA-RISC) в версиях 32 и 64 бит. Для HP-UX 11.23 IPF и HP-UX 11.31 IPF также доступны хранилища. Версии IPF не нуждаются в двух версиях GNU gcc.

На PA-RISC вам нужен другой компилятор для 32-битных и 64-битных приложений. На PA-RISC 32-битные и 64-битные объекты не смешиваются. Точка. Нет разного поведения для HP C-ANSI-C или GNU gcc. Таким образом, если вам требуется, чтобы ваш двоичный файл perl использовал 64-битные библиотеки, например Oracle-64bit, вы ДОЛЖНЫ собрать 64-битную версию perl.

Сборка 64-битного gcc на PA-RISC из исходных кодов возможна только при наличии компилятора HP C-ANSI C или уже работающей 64-битной двоичной версии gcc. Лучшая производительность для Perl достигается с помощью родного компилятора HP.

Использование больших файлов с Perl на HP-UX

Начиная с HP-UX версии 10.20, можно создавать и обрабатывать файлы размером более 2 ГБ (2^31 байт). Доступны три отдельных метода. Из этих методов наилучшим для Perl является компиляция с флагом -Duselargefiles для Configure. Это приводит к компиляции Perl с использованием структур и функций, в которых эти структуры имеют ширину 64 бита, а не 32 бита. (Обратите внимание, что это будет работать только с компилятором ANSI C от HP. Если вы хотите скомпилировать Perl с помощью gcc, вам нужно получить версию компилятора, поддерживающую 64-битные операции. См. выше, где это можно найти.)

У этого подхода есть некоторые недостатки. Один из них заключается в том, что любое расширение, которое вызывает любую функцию C для работы с файлами, необходимо перекомпилировать (следуйте стандартной процедуре «perl Makefile.PL; make; make test; make install»).

Список функций, которые необходимо перекомпилировать: creat, fgetpos, fopen, freopen, fsetpos, fstat, fstatvfs, fstatvfsdev, ftruncate, ftw, lockf, lseek, lstat, mmap, nftw, open, prealloc, stat, statvfs, statvfsdev, tmpfile, truncate, getrlimit, setrlimit

Другой недостаток, действующий только для версий Perl до 5.6.0. Этот недостаток заключается в том, что функции seek и tell (как встроенная версия, так и версия модуля POSIX) не будут работать правильно.

Сильно рекомендуется использовать этот флаг при запуске Configure. Если вы этого не сделаете, а позже ответите на вопрос о больших файлах, когда Configure вас об этом спросит, вы можете получить конфигурацию, которую нельзя скомпилировать, или которая не будет работать должным образом.

Потоковый Perl на HP-UX

Возможна компиляция потоковой версии Perl на любой версии HP-UX до 10.30, но настоятельно рекомендуется использовать HP-UX 11.00 или более позднюю версию.

Для компиляции Perl с потоками добавьте -Dusethreads в аргументы Configure. Убедитесь, что флаг компилятора -D_POSIX_C_SOURCE=199506L автоматически добавляется в список флагов. Также убедитесь, что -lpthread указан перед -lc в списке библиотек, с которыми Perl должен быть связан. Подсказки, предоставляемые для HP-UX во время Configure, будут очень стараться сделать это правильно для вас.

Версии HP-UX до 10.30 требуют отдельной установки пакета библиотек потоков POSIX. Два примера — пакет HP DCE, доступный в «HP-UX Hardware Extensions 3.0, Install and Core OS, Release 10.20, April 1999 (B3920-13941)», или свободно доступный пакет PTH, доступный на сайте H.Merijn (http://mirrors.develooper.com/hpux/). Использование PTH будет неподдерживаемым в perl-5.12 и выше и довольно глючным в 5.11.x.

Если вы собираетесь использовать пакет HP DCE, библиотека, используемая для потоков, — /usr/lib/libcma.sl, но за время существования было много обновлений этой библиотеки. Perl будет собираться с первой версией, но не пройдёт набор тестов. Более старые версии Oracle могут быть веской причиной не обновлять эту библиотеку, в противном случае найдите новую версию в одном из следующих исправлений: PHSS_19739, PHSS_20608 или PHSS_23672

reformatted output:

d3:/usr/lib 106 > what libcma-*.1
libcma-00000.1:
   HP DCE/9000 1.5               Module: libcma.sl (Export)
                                 Date: Apr 29 1996 22:11:24
libcma-19739.1:
   HP DCE/9000 1.5 PHSS_19739-40 Module: libcma.sl (Export)
                                 Date: Sep  4 1999 01:59:07
libcma-20608.1:
   HP DCE/9000 1.5 PHSS_20608    Module: libcma.1 (Export)
                                 Date: Dec  8 1999 18:41:23
libcma-23672.1:
   HP DCE/9000 1.5 PHSS_23672    Module: libcma.1 (Export)
                                 Date: Apr  9 2001 10:01:06
d3:/usr/lib 107 >

Если вы выберете пакет PTH, используйте swinstall для установки pth в стандартное расположение (/opt/pth), а затем создайте символические ссылки на библиотеки из /usr/lib

# cd /usr/lib
# ln -s /opt/pth/lib/libpth* .

Для сборки perl для поддержки Oracle, он должен быть связан с libcl и libpthread, последнее даже если perl собран без потоков. См. «Oracle на HP-UX» ниже.

64-битный Perl на HP-UX

Начиная с HP-UX 11.00, программы, скомпилированные под HP-UX, могут использовать среду программирования LP64 (LP64 означает, что длинные целые и указатели имеют ширину 64 бита), в которой переменные скаляров смогут хранить числа больше 2^32 с полной точностью. Perl зарекомендовал себя как стабильный и надёжный в 64-битном режиме с версии 5.8.1 на всех HP-UX 11.xx.

На момент написания данной документации Perl полностью совместим с 64-битами на HP-UX 11.00 и выше как для сборок с cc, так и с gcc. Если вы собираетесь собрать 64-битный perl с помощью GNU gcc, внимательно прочтите раздел о gcc.

Если необходимо скомпилировать Perl в среде LP64, используйте флаг -Duse64bitall в Configure. Это заставит Perl быть скомпилированным в чистой среде LP64 (с флагом +DD64 для HP C-ANSI-C, без дополнительных опций для GNU gcc 64-бит на PA-RISC и с -mlp64 для GNU gcc на Itanium). Если вы хотите скомпилировать Perl с помощью gcc, вам нужно получить версию компилятора, поддерживающую 64-битные операции.)

Вы также можете использовать флаг -Duse64bitint в Configure. Несмотря на некоторые незначительные различия между компиляцией Perl с этим флагом и флагом -Duse64bitall, они не должны быть заметны с точки зрения пользователя Perl. При конфигурации -Duse64bitint с помощью 64-битного gcc на архитектуре pa-risc, -Duse64bitint будет безмолвно преобразован в -Duse64bitall.

В обоих случаях настоятельно рекомендуется использовать эти флаги при запуске Configure. Если вы этого не сделаете, а позже ответите на вопросы о 64-битных числах, когда Configure вас об этом спросит, вы можете получить конфигурацию, которую нельзя скомпилировать, или которая не будет работать должным образом.

Oracle на HP-UX

Использование perl для подключения к базам данных Oracle через DBI и DBD::Oracle вызвало множество головных болей у многих людей. Более подробная информация содержится в README.hpux в DBD::Oracle. Причина упоминания здесь заключается в том, что Oracle требует perl, скомпилированного с libcl и libpthread, последняя даже при сборке perl без потоков. Для сборки perl с использованием всех параметров по умолчанию, но позволяющей в дальнейшем собрать DBD::Oracle, можно использовать

Configure -A prepend:libswanted='cl pthread ' ...

Не забудьте пробел перед заключительной кавычкой.

Также обратите внимание, что это пока не работает со всеми конфигурациями, известно, что это не работает с 64-битными версиями GCC.

GDBM и потоки на HP-UX

Если вы попытаетесь скомпилировать Perl с (POSIX) потоками на системе 11.X и также подключить библиотеку GDBM, Perl немедленно выдаст дамп ядра при запуске. Единственный обходной путь на данный момент — перекомпилировать библиотеку GDBM под 11.X, а затем перекомпилировать её в Perl.

Ошибка может выглядеть следующим образом:

Внутренняя ошибка Pthread: сообщение: __libc_reinit() завершилась неудачно, файл: ../pthreads/pthread.c, строка: 1096 Указатель возврата равен 0xc082bf33 sh: 5345 Выход (coredump)

и Configure прекратит работу.

NFS файловые системы и utime(2) на HP-UX

Если вы компилируете Perl на удалённо смонтированной NFS файловой системе, тест io/fs.t может завершиться неудачей на тесте №18. Похоже, это ошибка HP-UX, и в настоящее время нет решения.

Параметры ядра HP-UX (maxdsiz) для компиляции Perl

По умолчанию HP-UX настроен с максимальным размером сегмента данных 64 МБ. Это слишком мало для корректной компиляции Perl с максимальными уровнями оптимизации. Вы можете увеличить размер параметра ядра maxdsiz с помощью SAM.

При использовании графической версии SAM, нажмите на значок Настройки ядра, затем на значок Настраиваемые параметры. Прокрутите вниз и выберите строку maxdsiz. В меню Действия выберите пункт Изменить настраиваемый параметр. Введите новую формулу в поле Формула/Значение. Затем следуйте инструкциям по перестроению ядра и перезагрузке системы.

В общем случае значение 256 МБ (или "256*1024*1024") достаточно для компиляции Perl с максимальной оптимизацией.

дамп ядра nss_delete из op/pwent или op/grent

Вы можете получить ошибку дамп ядра (bus error) из тестов op/pwent или op/grent. Если компилировать с -g, вы увидите трассировку стека, похожую на следующую:

#0  0xc004216c in  () from /usr/lib/libc.2
#1  0xc00d7550 in __nss_src_state_destr () from /usr/lib/libc.2
#2  0xc00d7768 in __nss_src_state_destr () from /usr/lib/libc.2
#3  0xc00d78a8 in nss_delete () from /usr/lib/libc.2
#4  0xc01126d8 in endpwent () from /usr/lib/libc.2
#5  0xd1950 in Perl_pp_epwent () from ./perl
#6  0x94d3c in Perl_runops_standard () from ./perl
#7  0x23728 in S_run_body () from ./perl
#8  0x23428 in perl_run () from ./perl
#9  0x2005c in main () from ./perl

Ключевым моментом здесь является вызов nss_delete. Одним из способов решения этой проблемы, похоже, является добавление в файл /etc/nsswitch.conf (по крайней мере) следующих строк

group: files
passwd: files

Не имеет значения, используете ли вы NIS. Удивительно, но та же ошибка также затрагивает Solaris.

ошибка: склеивание ")" и "l" не даёт допустимого маркера предварительной обработки

Похоже, в заголовочном файле системы HP-UX 11.00 есть ошибка, которая нарушает сборку perl в 32-битном режиме с GNU gcc-4.x, вызывая эту ошибку. Тот же файл для HP-UX 11.11 (хотя файл и старше) не показывает этой ошибки и содержит правильное определение, поэтому лучшим решением является исправление заголовка, чтобы он соответствовал:

--- /usr/include/inttypes.h  2001-04-20 18:42:14 +0200
+++ /usr/include/inttypes.h  2000-11-14 09:00:00 +0200
@@ -72,7 +72,7 @@
 #define UINT32_C(__c)                   __CONCAT_U__(__c)
 #else /* __LP64 */
 #define INT32_C(__c)                    __CONCAT__(__c,l)
-#define UINT32_C(__c)                   __CONCAT__(__CONCAT_U__(__c),l)
+#define UINT32_C(__c)                   __CONCAT__(__c,ul)
 #endif /* __LP64 */

 #define INT64_C(__c)                    __CONCAT_L__(__c,l)

Пере объявление "sendpath" с другим спецификатором класса хранения

Следующие предупреждения о компиляции могут возникнуть на релизах HP-UX, предшествующих 11.31, но они не влияют на работу:

cc: "/usr/include/sys/socket.h", line 535: warning 562:
   Redeclaration of "sendfile" with a different storage class
   specifier: "sendfile" will have internal linkage.
cc: "/usr/include/sys/socket.h", line 536: warning 562:
   Redeclaration of "sendpath" with a different storage class
   specifier: "sendpath" will have internal linkage.

Они, похоже, вызваны ошибочными заголовочными файлами системы, и такие же предупреждения видны и в других открытых проектах. Следующие исправления HP-UX должны устранить эти предупреждения:

CR JAGae12001: PHNE_27063
Warning 562 on sys/socket.h due to redeclaration of prototypes

CR JAGae16787:
Warning 562 from socket.h sendpath/sendfile -D_FILEFFSET_BITS=64

CR JAGae73470 (11.23)
ER: Compiling socket.h with cc -D_FILEFFSET_BITS=64 warning 267/562

Разное

Отмечалось, что исправление HP-UX 11 Y2K "Y2K-1100 B.11.00.B0125 HP-UX Core OS Year 2000 Patch Bundle" нарушает тест io/fs №18, который проверяет, может ли utime() изменить метки времени. Похоже, исправление Y2K нарушает utime(), так что над NFS метки времени не изменяются (на локальных файловых системах utime() всё ещё работает). Скорее всего, эта проблема уже исправлена на вашей системе.

Автор

Х.Мерьян Брэнд <h.m.brand@xs4all.nl> Джефф Окамото <okamoto@corp.hp.com>

С большой помощью по поводу общих библиотек от Марка Сабателлы.

© 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/perlhpux

Spec-Zone.ru

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