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)
Также 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.28.3/perltru64