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 поставляется со stub-версией 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 АВТОР
Нортон Т. Аллен (allen@huarp.harvard.edu)
© 1993–2023 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.38.0/perlqnx