Spec-Zone.ru › Perl 5.30

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

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

PA-RISC

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

Системы HP 9000 Unix работают на собственном чипе Precision Architecture (PA-RISC) от HP. Раньше 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 бита. (Обратите внимание, что это будет работать только с компилятором 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 (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, без дополнительных опций для 64-битного GNU gcc на 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() failed, файл: ../pthreads/pthread.c, строка: 1096 Возвращаемый указатель — 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 с максимальной оптимизацией.

Дамп ядра 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.Merijn Brand <h.m.brand@xs4all.nl> Jeff Okamoto <okamoto@corp.hp.com>

С большой помощью по поводу общих библиотек от Marc Sabatella.

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

Spec-Zone.ru

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