perlhpux
СОДЕРЖАНИЕ
- НАЗВАНИЕ
- ОПИСАНИЕ
- Использование perl, поставляемого с HP-UX
- Использование perl из центра портирования HP
- Другие предварительно скомпилированные двоичные файлы perl
- Компиляция Perl 5 на HP-UX
- PA-RISC
- Переносимость между версиями PA-RISC
- PA-RISC 1.0
- PA-RISC 1.1
- PA-RISC 2.0
- Семейство процессоров 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.16.3, которая является последней стабильной версией с точки зрения портеров).
Центры портирования HP ограничены в отношении тех систем, на которые они разрешены для портирования, и обычно выбирают две самые последние доступные версии ОС.
HP попросила центр портирования перенести двоичные файлы с открытым исходным кодом из /opt в /usr/local, поэтому двоичные файлы, созданные с начала июля 2002 года, находятся в /usr/local.
Один из URL-адресов центров портирования HP: http://hpux.connect.org.uk/ Текущая доступная версия построена с помощью GNU gcc.
Другие предварительно скомпилированные двоичные файлы 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
Системы Unix HP 9000 HP работают на собственном чипе Precision Architecture (PA-RISC). HP-UX ранее работали на семействе чипов Motorola MC68000, но любая машина с этим чипом устарела, и данный документ не будет пытаться решить проблемы с компиляцией Perl на чипах Motorola.
На момент последнего обновления документа версия PA-RISC — 2.0, и это последняя версия. Системы 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 |
+--------+----------------+----------------+-----------------+ Из http://www.hp.com/products1/evolution/9000/faqs.html
The last order date for HP 9000 systems was December 31, 2008. Полный список моделей на момент создания ОС находится в файле /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
Исполняемый файл, скомпилированный на платформе 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.
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 Семейство процессоров Itanium (IPF) и HP-UX
HP-UX также работает на новом процессоре Itanium. Это требует использования другой версии HP-UX (в настоящее время 11.23 или 11i v2), и за исключением нескольких отличий, подробно описанных ниже и в последующих разделах, 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-2022 (IPF) Полный список поддержки оборудования/ОС и ожидаемого окончания жизненного цикла см. по адресу http://www.hp.com/go/hpuxservermatrix
Создание динамических расширений на 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.
Теперь невозможно подключать 64-битные общие библиотеки 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, без дополнительных опций для GNU gcc 64-битный на PA-RISC и с -mlp64 для GNU gcc на Itanium). Если вы хотите скомпилировать Perl с помощью gcc, вам необходимо получить версию компилятора, поддерживающую 64-битные операции.)
Также можно использовать флаг -Duse64bitint для Configure. Несмотря на некоторые небольшие различия между компиляцией Perl с этим флагом и флагом -Duse64bitall, они не должны быть заметны для пользователя Perl. При конфигурации -Duse64bitint с 64-битным gcc на архитектуре pa-risc -Duse64bitint будет молчаливо преобразован в -Duse64bitall.
В обоих случаях настоятельно рекомендуется использовать эти флаги при выполнении Configure. Если вы этого не сделаете, но позже ответите на вопросы о 64-битных числах, когда Configure вас спросит, вы можете получить конфигурацию, которую нельзя скомпилировать, или которая не будет работать должным образом.
Oracle на HP-UX
Использование perl для подключения к базам данных Oracle через DBI и DBD::Oracle вызвало много проблем у многих людей. Прочитайте README.hpux в DBD::Oracle для получения более подробной информации. Причина упоминания здесь заключается в том, что Oracle требует perl, скомпилированный с libcl и libpthread, последнее — даже если perl построен без потоков. Построение perl с помощью всех параметров по умолчанию, но с последующей возможностью построения DBD::Oracle, можно осуществить с помощью
Configure -A prepend:libswanted='cl pthread ' ... Не забудьте пробел перед заключительной кавычкой.
Также обратите внимание, что это (пока) не работает со всеми конфигурациями, известно, что это приводит к ошибкам в 64-битных версиях GCC.
GDBM и потоки на HP-UX
Если вы пытаетесь скомпилировать Perl с (POSIX) потоками на системе 11.X и также подключаете библиотеку GDBM, Perl немедленно завершится с ошибкой core dump при запуске. Единственное решение на данный момент — перекомпилировать библиотеку GDBM под 11.X, а затем перекомпилировать её в Perl.
Ошибка может выглядеть примерно так:
Pthread внутренняя ошибка: сообщение: __libc_reinit() не удалось, файл: ../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 ошибка core dump из op/pwent или op/grent
Вы можете получить ошибку core dump с ошибкой «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.28.3/perlhpux