Spec-Zone.ru › Perl 5.32

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`, поэтому если вы 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

Spec-Zone.ru

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