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 АВТОР
Нортон Т. Аллен (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.32.0/perlqnx