perltru64
СОДЕРЖАНИЕ
- НАЗВАНИЕ
- ОПИСАНИЕ
- Тестирование Perl на Tru64
- Тест ext/ODBM_File/odbm, завершающийся сбоем при статических сборках
- Perl завершается сбоем из-за неразрешенного символа sockatmark
- read_cur_obj_info: неверный магический номер файла
- АВТОР
НАЗВАНИЕ
perltru64 - Perl версия 5 на системах Tru64 (ранее известных как Digital UNIX, ранее известные как DEC OSF/1)
ОПИСАНИЕ
В данном документе описаны различные особенности операционной системы Unix от HP (ранее Compaq, ранее Digital) — 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)
Также конфигурация может прерваться с
Build a threading Perl? [n]
Configure[2437]: Syntax error at line 1 : 'config.sh' is not expected. Это указывает на то, что конфигурация запускается с повреждённой оболочкой Korn (хотя вы считаете, что используете оболочку Bourne, используя «sh Configure» или «./Configure»). Неисправность в Korn shell была сообщена Compaq в феврале 1999 года, но пока что причина использования ksh состоит в том, что переменная среды BIN_SH установлена в значение 'xpg4'. Это заставляет /bin/sh делегировать свои обязанности /bin/posix/sh (ksh). Сбросьте переменную окружения и перезапустите конфигурацию.
Использование больших файлов с Perl на Tru64
В Tru64 Perl автоматически умеет работать с большими файлами, то есть файлами размером более 2 гигабайт. Нет необходимости использовать опцию конфигурации -Duselargefiles, как описано в INSTALL (хотя использование опции не наносит вреда).
Потоковый Perl на Tru64
Если вы хотите использовать потоки, вам следует в первую очередь использовать модель потоков Perl 5.8.0, запустив конфигурацию с помощью -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 — плохая идея. Обращайте внимание на опции конфигурации -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 бита. Нет необходимости использовать опцию конфигурации -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–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.34.0/perltru64