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`, поэтому если вы переходите в каталог с помощью `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–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/perlqnx