perltru64
СОДЕРЖАНИЕ
- НАЗВАНИЕ
- ОПИСАНИЕ
- Тестирование Perl на Tru64
- ext/ODBM_File/odbm. Тест не проходит при статических сборках
- Perl не проходит из-за неразрешенного символа sockatmark
- read_cur_obj_info: неверный магический номер файла
- АВТОР
НАЗВАНИЕ
perltru64 - Perl версия 5 на системах Tru64 (ранее известные как Digital UNIX, ранее известные как DEC OSF/1)
ОПИСАНИЕ
Этот документ описывает различные особенности операционной системы HP (ранее Compaq, ранее Digital) Unix (Tru64), которые повлияют на конфигурацию, компиляцию и/или выполнение Perl версии 5 (далее просто Perl).
Компиляция Perl 5 на Tru64
Рекомендуемый компилятор для использования в Tru64 — это родной компилятор C. Родной компилятор генерирует гораздо более быстрый код (разница в скорости заметна: несколько десятков процентов) и также более корректный код: если вы рассматриваете использование компилятора GNU C, вам следует использовать, как минимум, релиз 2.95.3, поскольку все более старые релизы gcc известны тем, что генерируют некорректный код при компиляции Perl. Одним из проявлений этой некорректности является сбой теста lib/sdbm; другим — сбой многих тестов op/regexp и op/pat, или ext/Storable (точный характер сбоев зависит от релиза GCC и флагов оптимизации).
Как родной cc, так и gcc, похоже, потребляют много памяти при построении Perl. toke.c — известная проблемная область при оптимизации: 256 мегабайт памяти данных, кажется, достаточно. Ещё одной проблемной областью является скрипт mktables, который строит таблицы поддержки Unicode. Значение раздела данных процесса по умолчанию в Tru64 должно составлять один гигабайт, но на некоторых сайтах/настройках это значение может быть уменьшено. Процесс конфигурации Perl проверяет слишком низкие пределы процесса и снижает оптимизацию для toke.c при необходимости, а также даёт рекомендации по повышению пределов процесса (например: ulimit -d 262144)
Кроме того, Configure может прерваться с
Build a threading Perl? [n]
Configure[2437]: Syntax error at line 1 : 'config.sh' is not expected. Это указывает на то, что Configure запускается со сломанной оболочкой Korn (хотя вы думаете, что используете оболочку Bourne, используя «sh Configure» или «./Configure»). Баг в оболочке Korn был сообщен Compaq в феврале 1999 года, но пока что причина использования ksh заключается в том, что переменная среды BIN_SH установлена в «xpg4». Это заставляет /bin/sh делегировать свои обязанности /bin/posix/sh (ksh). Снимите переменную среды и запустите Configure заново.
Использование больших файлов с Perl на Tru64
В Tru64 Perl автоматически способен работать с большими файлами, то есть файлами размером более 2 гигабайт, нет необходимости использовать опцию Configure -Duselargefiles, как описано в INSTALL (хотя использование опции не вредит).
Потоковый Perl на Tru64
Если вы хотите использовать потоки, то вы должны в первую очередь использовать модель потоков Perl 5.8.0, запустив Configure с -Duseithreads.
Потоковое программирование Perl будет работать только в Tru64 4.0 и более новых версиях, более старые операционные системы, такие как 3.2, вероятно, не будут работать должным образом с потоками.
В Tru64 V5 (по крайней мере, V5.1A, V5.1B) вы не можете скомпилировать потоковый Perl с помощью gcc, потому что системный заголовок <pthread.h> явно проверяет поддерживаемые компиляторы C, а gcc (по крайней мере, 3.2.2) таковым не является. Но системный компилятор C должен работать без проблем.
Длинные вещественные числа на Tru64
Вы не можете настроить Perl для использования длинных вещественных чисел, если у вас нет хотя бы Tru64 V5.0, поддержка длинных вещественных чисел просто не была достаточно функциональной до этого. Perl's Configure переопределит попытки использовать длинные вещественные числа (вы можете заметить это по тому, что Configure обнаружит, что функция modfl() не работает должным образом).
На момент написания этого документа (июнь 2002 года) существует известный баг в Tru64 libc при печати длинных вещественных чисел, когда не используется обозначение «e». Значения корректны и применимы, но вы увидите ограниченное количество цифр, если не заставите отобразить их с помощью printf "%.33e",$num или аналогичного. Для версий Tru64 V5.0A до V5.1A заплатка ожидается где-то после выпуска perl 5.8.0. Если ваша libc не была обновлена, Configure выведет предупреждение при выборе длинных вещественных чисел.
Тесты DB_File, не проходящие на Tru64
Тесты DB_File (db-btree.t, db-hash.t, db-recno.t) могут не пройти, если вы установили более новую версию Berkeley DB в систему, а флаги компилятора и линковщика -I и -L вводят конфликты версий с заголовками и библиотеками DB 1.85, которые поставлялись с Tru64. Например, смешивание библиотеки DB v2 с заголовками DB v1 — плохая идея. Следите за опциями Configure -Dlocincpth и -Dloclibpth, и проверьте /usr/local/include и /usr/local/lib, так как они включаются по умолчанию.
Второй вариант — явно указать Configure на обнаружение более новой установки Berkeley DB, предоставив нужные каталоги с помощью -Dlocincpth=/some/include и -Dloclibpth=/some/lib и перед запуском "make test" установить LD_LIBRARY_PATH в /some/lib.
Третий вариант — обойти проблему, отключив DB_File полностью при сборке Perl, указав -Ui_db в Configure, а затем используя модуль BerkeleyDB из CPAN вместо DB_File. BerkeleyDB работает с версиями Berkeley DB 2.* или выше.
Berkeley DB 4.1.25 протестирован с Tru64 V5.1A и показал работоспособность. Последнюю версию Berkeley DB можно найти на http://www.sleepycat.com.
64-битный Perl на Tru64
В Tru64 целые числа Perl автоматически имеют ширину 64 бита, нет необходимости использовать опцию Configure -Duse64bitint, как описано в INSTALL. Аналогично, нет необходимости в -Duse64bitall, так как указатели автоматически имеют ширину 64 бита.
Предупреждения о переполнении плавающей точки при компиляции Perl на Tru64
При компиляции Perl в Tru64 вы можете (в зависимости от релиза компилятора) увидеть два предупреждения такого типа
cc: Warning: numeric.c, line 104: In this statement, floating-point
overflow occurs in evaluating the expression "1.8e308". (floatoverfl)
return HUGE_VAL;
-----------^ и при компиляции расширения POSIX
cc: Warning: const-c.inc, line 2007: In this statement, floating-point
overflow occurs in evaluating the expression "1.8e308". (floatoverfl)
return HUGE_VAL;
-------------------^ Точные номера строк могут отличаться в зависимости от версии Perl. Предупреждения безопасны и могут быть проигнорированы: в более поздних версиях компилятора C предупреждения должны исчезнуть.
При компиляции файла pp_sys.c вы можете (в зависимости от релиза операционной системы) увидеть дополнительный флаг компилятора: -DNO_EFF_ONLY_OK. Это нормально и относится к функции, которая актуальна только если вы используете filetest псевдоним. В более ранних версиях операционной системы эта функция была неисправной, и NO_EFF_ONLY_OK сообщает Perl не использовать эту функцию.
Тестирование Perl на Tru64
Во время "make test" comp/cpp будут пропущены, потому что на Tru64 они не могут быть протестированы до установки Perl. Тест относится к использованию -P опции Perl.
ext/ODBM_File/odbm. Тест не проходит при статических сборках
Известно, что ext/ODBM_File/odbm не проходит с статическими сборками (Configure -Uusedl) из-за известного бага в статической библиотеке libdbm Tru64. Хорошая новость заключается в том, что вам, скорее всего, никогда не понадобится расширение ODBM_File, так как более совершенное NDBM_File работает хорошо, не говоря уже о ещё более совершенном DB_File.
Perl не проходит из-за неразрешенного символа sockatmark
Если вы получите ошибку:
Can't load '.../OSF1/lib/perl5/5.8.0/alpha-dec_osf/auto/IO/IO.so' for module IO: Unresolved symbol in .../lib/perl5/5.8.0/alpha-dec_osf/auto/IO/IO.so: sockatmark at .../lib/perl5/5.8.0/alpha-dec_osf/XSLoader.pm line 75. вам нужно либо перекомпилировать Perl в Tru64 4.0D, либо обновить Tru64 4.0D до версии 4.0F или выше: системный вызов sockatmark() был добавлен в Tru64 4.0F, а расширение IO использует этот символ.
read_cur_obj_info: неверный магический номер файла
Возможно, вы смешиваете Tru64 cc/ar/ld с GNU gcc/ar/ld. Это может работать, но иногда нет (ваш gcc или GNU утилиты могут быть скомпилированы для несовместимого релиза ОС).
Попробуйте «which ld» и «which ld» (или попробуйте 'ar --version' и 'ld --version', которые работают только для GNU инструментов и объявят себя таковыми), и скорректируйте свой PATH, чтобы вы последовательно использовали либо родные инструменты, либо GNU инструменты. После исправления PATH вы должны выполнить 'make distclean' и начать всё сначала, запустив Configure, так как у вас может быть довольно запутанная ситуация.
АВТОР
Jarkko Hietaniemi <jhi@iki.fi>
© 1993–2023 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.38.0/perltru64