Spec-Zone.ru › Perl 5.38

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. Первое появление — на компакт-диске 5012-7954, и его можно установить, используя

swinstall -s /cdrom perl

предполагая, что этот компакт-диск смонтирован в /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 попросила центр портирования переместить двоичные файлы с открытым исходным кодом из /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 Processor Family) поддерживают все версии 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, который требует libdb.sl от SleepyCat:

# 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 бита. (Обратите внимание, что это будет работать только с компилятором HP ANSI C. Если вы хотите скомпилировать 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's (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

переформатированный вывод:

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-bit на 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 немедленно выдаст ошибку core dump при запуске. Единственным решением на данный момент является повторная компоновка библиотеки GDBM под 11.X, а затем повторная компоновка её в Perl.

Ошибка может выглядеть примерно так:

Pthread internal error: message: __libc_reinit() failed, file: ../pthreads/pthread.c, line: 1096 Return Pointer is 0xc082bf33 sh: 5345 Quit(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 с максимальной оптимизацией.

Ошибка core dump nss_delete из op/pwent или op/grent

Вы можете получить ошибку core dump типа «ошибка шины» из тестов 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.

Похоже, они вызваны некорректными системными заголовочными файлами, а также другие open source проекты их видят. Следующие исправления 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–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/perlhpux

Spec-Zone.ru

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