Просмотр сообщений
Страниц: [1]
1  Разработка / Перенос приложений в QNX / QT4 и QNX 6.3.0 : Апреля 19, 2007, 03:01:19 pm
Я вчера-сегодня тоже пособирал Qt4. Использовал Qt 4.1.1, QNX 6.3.0, стандартный gcc 3.3.1. Я собирал в более скромной конфигурации: без qtgui, qtsvg, qtsql и без графических инструментов типа qt assistant. Уважаемый agent, не могли бы вы выложить патч исходников от стандартной версии QT до вашей, исправленой. Ну и обещаный howto, конечно. Мой алгоритм сборки оказался приблизительно таким:

1) Обходим "особенности" libc и gcc в QNX. В shared-версии libc не хватает вызова popen, а g++ не находит стандартные заголовочные файлы. Это было вылечено выдиранием popen.o из libcS.a и ключами к gcc -isystem, как описано здесь:
http://qnx.org.ru/index.php?option=com_minibb&action=vthread&forum=9&topic=427 4&page=0

2) Правим mkspecs/qnx-g++/{qmake.conf, qplatformdefs.h}. В релизе Qt4.1.1 эти файлы ещё присутствуют, но нуждаются в исправлениях.

3) Правим исходники qmake. Когда-то там был особый ключ -qnx6, но его имхо можно (нужно) удалить. Вроде как, всё что он делает - при линковке добавляет ключ -lcpp, а при компиляции -fhonor-std. -lcpp не нужен, если для линковки используется g++, а -fhonor-std является deprecated, начиная с gcc 3.1.

4) Правим config.tests/unix/makeabs, как раз там вызов cut с неподдерживаемым ключом. Заменяем cut -b1 на cut-c1.

5) Поправить projects.pro чтобы не собирались demos,examples,tools; src/src.pro - убрать gui,sql,svg. Мне-то графика не нужна.

6) Конфигурируем командой ./configure -platform qnx-g++ -little-endian -static. Прочие опции - по желанию.

Вроде как собирается. Простейшие програмки компилируются и запускаются. В моём варианте некоторые проблемы не решены, конечно. TODO list:
1) При конфигурации не срабатывает endian test, поэтому приходится указывать вручную -little-endian. Непорядок.
2) Ошибки при make install. Какие-то проблемы с созданием директорий, приходится перезапускать make install несколько раз, пока он не создаст все нужные директории.
3) Всегда ли нужно передавать g++ ключ -fexceptions? как это согласуется с политикой Qt по этому поводу?
4) Сборка динамической (shared) библиотеки. Даже не занимался.
5) Нужен ли в qmake отдельный ключ -qnx6 или его можно выбросить? Как это сделать правильно?
6) QtGui...

Насчёт игнорирования переменной PREFIX для инсталляции - не знаю, я умолчания не менял.

Файла unix-processes.cpp у меня в дереве Qt нет вообще, возможно, дело в том, что у меня более ранняя версия Qt. Но вообще, в mkspecs/qnx-g++/qplatformdefs.h есть макрос QT_SOCKLEN_T, который и должен определять тип socklen_t. Файл unix-processes.cpp использует этот макрос или size_t там жёстко вкодирован?
Страниц: [1]