perltru64
СОДЕРЖАНИЕ
- НАЗВАНИЕ
- ОПИСАНИЕ
- Тестирование Perl на Tru64
- ext/ODBM_File/odbm Test, не проходящий со статическими сборками
- Perl не проходит из-за неразрешенного символа sockatmark
- read_cur_obj_info: неверный магический номер файла
- АВТОР
НАЗВАНИЕ
perltru64 - Perl версии 5 на системах Tru64 (ранее известный как Digital UNIX, ранее DEC OSF/1)
ОПИСАНИЕ
В данном документе описаны различные особенности операционной системы Unix (Tru64) HP (ранее Compaq, ранее Digital), которые повлияют на конфигурацию, компиляцию и/или работу 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 Shell (даже если вы думаете, что используете оболочку Bourne, используя «sh Configure» или «./Configure»). Ошибка в оболочке Korn Shell была сообщена 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. Это нормально и относится к функции, которая имеет значение только в том случае, если используется pragma filetest. В более ранних версиях операционной системы функция была неработоспособна, и NO_EFF_ONLY_OK сообщает Perl, что не следует использовать эту функцию.
Тестирование Perl на Tru64
Во время «make test» comp/cpp будут пропущены, потому что на Tru64 их нельзя проверить до установки Perl. Тест относится к использованию опции -P Perl.
ext/ODBM_File/odbm Test, не проходящий со статическими сборками
Известно, что 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.36.0/perltru64