perlqnx
СОДЕРЖАНИЕ
ИМЯ
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`, поэтому если вы cd `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.36.0/perlqnx