Spec-Zone.ru › Perl 5.30

perltru64

СОДЕРЖАНИЕ

  • НАЗВАНИЕ
  • ОПИСАНИЕ
    • Компиляция Perl 5 на Tru64
    • Использование больших файлов с Perl на Tru64
    • Потоковый Perl на Tru64
    • Длинные числа с плавающей точкой на Tru64
    • Тесты DB_File, завершающиеся ошибкой на Tru64
    • 64-битный Perl на Tru64
    • Предупреждения о переполнении при компиляции с плавающей точкой в Perl на Tru64
  • Тестирование 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)

Кроме того, 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 pragma. В более старых версиях операционной системы эта функция была неисправной, и 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–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/perltru64

Spec-Zone.ru

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