Spec-Zone.ru › Perl 5.34

perlqnx

СОДЕРЖАНИЕ

  • ИМЯ
  • ОПИСАНИЕ
    • Необходимое ПО для компиляции Perl на QNX4
    • Нерешённые проблемы с Perl на QNX4
    • Вспомогательные файлы QNX
    • Нерешённые проблемы с perl под QNX6
    • Кросс-компиляция
      • Настройка среды кросс-компиляции
      • Подготовка целевой системы
      • Вызов Configure
  • АВТОР

ИМЯ

perlqnx - Perl версия 5 на QNX

ОПИСАНИЕ

По состоянию на perl5.7.2 все тесты проходят под:

QNX 4.24G
Watcom 10.6 with Beta/970211.wcc.update.tar.F
socket3r.lib Nov21 1996.

По состоянию на perl5.8.1 по крайней мере один тест всё ещё не проходит.

Некоторые тесты могут жаловаться в известных обстоятельствах.

См. ниже и hints/qnx.sh для получения дополнительной информации.

Под QNX 6.2.0 всё ещё есть несколько тестов, которые не проходят. См. ниже и hints/qnx.sh для получения дополнительной информации.

Необходимое ПО для компиляции Perl на QNX4

Как и во многих портах Unix, этот зависит от нескольких «стандартных» утилит Unix, которые не обязательно являются стандартными для QNX4.

/bin/sh

Это активно используется Configure, а затем и самим perl. Версия QNX4 подходит, но Configure откажется от 16-битной версии, поэтому, если вы работаете под QNX 4.22, свяжите /bin/sh с /bin32/ksh

ar

Это стандартный инструмент для построения библиотек Unix. Мы используем wlib. С Watcom 10.6, когда wlib связан как "ar", он ведёт себя как ar и всё в порядке. Под 9.5 требуется обёртка. Одна включена в ../qnx

nm

Это используется (необязательно) configure для вывода содержимого библиотек. Я сгенерирую функцию-обёртку на лету в каталоге UU.

cpp

Configure и perl нуждаются в способе вызова препроцессора C. Я создал простую обёртку для cc, которая делает всё правильно. Без этого Configure создаст свою собственную обёртку, которая работает, но она не обрабатывает некоторые параметры командной строки, которые perl будет передавать ей.

make

Вам действительно нужен GNU make для компиляции. GNU make поставляется по умолчанию с QNX 4.23, но его можно получить из quics для более ранних версий.

Нерешённые проблемы с Perl на QNX4

Поддержка динамически подключаемых библиотек в QNX4 отсутствует.

Если вы хотите скомпилировать расширение Socket, вам нужно иметь TCP/IP-набор инструментов, и вы должны убедиться, что -lsocket находит правильную копию socket3r.lib. Остерегайтесь, что компилятор Watcom поставляется со служебной версией socket3r.lib с очень малым функционалом. Также будьте внимательны к порядку, в котором wlink ищет каталоги библиотек. У вас может быть /usr/lib/socket3r.lib, указывающий на правильную библиотеку, но wlink может выбрать /usr/watcom/10.6/usr/lib/socket3r.lib вместо этого. Убедитесь, что оба указывают на правильную библиотеку, то есть /usr/tcptk/current/usr/lib/socket3r.lib.

Следующие тесты могут сообщать об ошибках под QNX4:

dist/Cwd/Cwd.t будет жаловаться, если `pwd` и cwd не дают одинаковых результатов. cwd вызывает `fullpath -t`, поэтому если вы перейдете в каталог `fullpath -t` перед запуском теста, он пройдёт.

lib/File/Find/taint.t будет жаловаться, если '.' есть в вашей переменной PATH. Тест PATH срабатывает, потому что cwd вызывает `fullpath -t`.

ext/IO/lib/IO/t/io_sock.t: Подтесты 14 и 22 пропускаются из-за того, что функциональность чтения статуса неблокирующего сокета не реализована в TCP/IP QNX. Это было сообщено в QNX, и это может работать с более поздними версиями TCP/IP.

t/io/tell.t: Подтест 27 не проходит. Мы всё ещё исследуем это.

Вспомогательные файлы QNX

Файлы в каталоге "qnx":

qnx/ar

Скрипт, эмулирующий стандартную утилиту архивации (библиотеки) Unix. Под Watcom 10.6, ar связан с wlib и предоставляет ожидаемый интерфейс. С Watcom 9.5 требуется функция-обёртка. Эта довольно грубая, но оказалась достаточной для компиляции perl.

qnx/cpp

Скрипт, обеспечивающий функциональность препроцессора C. Configure может создать подобную обёртку, но она не обрабатывает все параметры командной строки, которые perl передаёт ей. Это можно разумно поместить в /usr/local/bin.

Нерешённые проблемы с perl под QNX6

Следующие тесты всё ещё не проходят для Perl 5.8.1 под QNX 6.2.0:

op/sprintf.........................FAILED at test 91
lib/Benchmark......................FAILED at test 26

Это связано с ошибкой в функции printf библиотеки C. printf("'%e'", 0. ) возвращает '0.000000e+0', но ANSI требует '0.000000e+00'. QNX признала эту ошибку.

Кросс-компиляция

Perl поддерживает кросс-компиляцию для QNX NTO через Native Development Kit (NDK) для Blackberry 10. Это означает, что вы можете кросс-компилировать как для ARM, так и для x86 версий платформы.

Настройка среды кросс-компиляции

NDK можно загрузить с http://developer.blackberry.com/native/downloads/.

Инструкции по настройке вашего устройства до попыток чего-либо ещё см. в http://developer.blackberry.com/native/documentation/cascades/getting_started/setting_up.html.

После установки NDK и настройки устройства остаётся настройка устройства и среды кросс-компиляции. Blackberry предоставляет скрипт bbndk-env.sh (иногда с именем bbndk-env_10_1_0_4828.sh), который можно использовать для этого. Однако есть проблема: скрипт изменяет PATH так, что 'gcc' или 'ar' указывают на свои кросс-компиляционные эквиваленты, что ломает процесс сборки.

Поэтому вы захотите сделать что-то вроде этого:

$ orig_path=$PATH
$ source $location_of_bbndk/bbndk-env*.sh
$ export PATH="$orig_path:$PATH"

Помимо добавления кросс-компилятора и остальной части инструментальной цепочки в вашу переменную среды PATH, это также предоставит переменную QNX_TARGET, которую мы передадим Configure через -Dsysroot.

Подготовка целевой системы

Вероятность того, что целевая система не имеет готового /tmp, достаточно высока, поэтому в общем случае безопаснее сделать что-то вроде этого:

$ ssh $TARGETUSER@$TARGETHOST 'rm -rf perl; mkdir perl; mkdir perl/tmp'
$ export TARGETDIR=`ssh $TARGETUSER@$TARGETHOST pwd`/perl
$ export TARGETENV="export TMPDIR=$TARGETDIR/tmp; "

Позже мы передадим это Configure через -Dtargetenv

Вызов Configure

Если вы нацеливаетесь на ARM-устройство — что в настоящее время включает подавляющее большинство телефонов и планшетов — вы захотите передать -Dcc=arm-unknown-nto-qnx8.0.0eabi-gcc в Configure. В качестве альтернативы, если вы нацеливаетесь на x86-устройство или используете эмулятор, предоставляемый с NDK, вы должны указать -Dcc=ntox86-gcc вместо этого.

Пример вызова Configure выглядит примерно так:

./Configure -des -Dusecrosscompile \
    -Dsysroot=$QNX_TARGET          \
    -Dtargetdir=$TARGETDIR         \
    -Dtargetenv="$TARGETENV"       \
    -Dcc=ntox86-gcc                \
    -Dtarghost=... # Usual cross-compilation options

АВТОР

Norton T. Allen (allen@huarp.harvard.edu)

© 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/perlqnx

Spec-Zone.ru

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