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 работают на собственном чипе 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-64бит, вы ДОЛЖНЫ скомпилировать 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, Установка и основной OS, Релиз 10.20, Апрель 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.
Если пользователь нуждается в компиляции 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 немедленно выдаст ошибку 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
Вы можете получить ошибку «bus error» 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–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.36.0/perlhpux