Сборка QT под WinCE 6
ссылки:
http://doc.crossplatform.ru/qt/4.6.x/windowsce-customization.html - перевод
документации по сборке QT
Было острое желание перенести QT на WinCE платформу.
Установил Visual studio 2005, сервис пак 1, программы для работы с WinCE под студию,
кастом SDK для свое платы (называется SDK for tion pro v2).
В документации приведена сборка QT под WinCE 5, там идет стандартное SDK.
Закачал qt-everywhere-opensource-src-4.7.4
Создал в паке mkspec папку wince60teon-armv4i-msvc2005, в ней файлы
qmake.conf
#
# qmake configuration for wince60tion-armv4i-msvc2005
#
# Written for Microsoft VC2005.NET with tion pro v2 SDK for WindowsCE 6.0 (ARMV4I)
#
include(../common/wince/qmake.conf)
CE_SDK = SDK for Tion Pro v2
CE_ARCH = ARMV4I
DEFINES += UNDER_CE WINCE _WINDOWS _UNICODE UNICODE _WIN32_WCE=0x600 $$CE_ARCH _ARMV4I_ armv4i _ARM_ ARM _M_ARM ARM _WIN32 __arm__ QT_NO_PRINTER QT_NO_PRINTDIALOG
QMAKE_CFLAGS += -QRarch4T -QRinterwork-return
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:WINDOWSCE,6.00 /MACHINE:THUMB /ENTRY:mainACRTStartup
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWSCE,6.00 /MACHINE:THUMB
QMAKE_LFLAGS_DLL = /SUBSYSTEM:WINDOWSCE,6.00 /MACHINE:THUMB /DLL
QMAKE_LIBFLAGS = $$QMAKE_LFLAGS_WINDOWS
QMAKE_LIBFLAGS_RELEASE = /LTCG
QMAKE_LIBS = corelibc.lib
QMAKE_LIBS_CORE = corelibc.lib ole32.lib oleaut32.lib uuid.lib commctrl.lib coredll.lib winsock.lib
QMAKE_LIBS_GUI = ceshell.lib ole32.lib $$QMAKE_LIBS_CORE
QMAKE_LIBS_NETWORK = ws2.lib
default_post.prf
# Visual Studio has some definitions set internally.
# Thus we do not need to redefine these.
equals(TEMPLATE, "vc.*") {
DEFINES -= _M_ARM
QMAKE_CXXFLAGS += -fp:precise
}
qplatformdefs.h
/* Коменты*/
#include "../common/wince/qplatformdefs.h"
Далее сделал configure.exe с такими ключами
configure.exe -platform win32-msvc2005 -xplatform wince60teon-armv4i-msvc2005 -static -no-openssl -no-phonon -no-webkit -no-qt3support -no-scripttools -no-phonon-backend -no-gif -no-libpng -no-libmng -no-libtiff -no-opengl -debug-and-release -nomake examples -nomake demos -no-accessibility -D T_NO_CURSOR -D QT_NO_DRAGANDDROP -D QT_NO_CLIPBOARD -D QT_NO_ACCESSIBILITY -D QT_NO_SESSIONMANAGER -no-exceptions -opensource -qmake
После этого
посмотрел название SDK
checksdk.exe -list
...
SDK for Tion Pro v2 (ARMV4I)
...
собрал скрипт для установки PATH
checksdk.exe -sdk "SDK for Tion Pro v2 (ARMV4I)" -script teon2.bat
запустил
teon2.bat
Далее nmake.exe
И вот в чем проблема, собиралось собиралось все и потом на QTXml выдало ошибку...
Вообще nmake создает в корне projects.sln, который можно открыть в visual studio, в ней нажать F7 (собрать все) и qt я так понимаю будет собираться.
И таким образом (через visual studio) qt собирается... Собрался и qmake
Далее открываю Qt creator, создаю проект, в нем прописываю пути к собраному qmake, он все видит, цепляется и все вроде бы хорошо...
Но при компиляции проекты выдает ошибку линкера типо "несовместимость библиотеки x86 и thumb" и инструментарий говорит, что типо компилер под x86 к qmake...
И конечно же ничего не запускается...
Собственно вопросов несколько:
1) Почему через консоль и nmake qt не собирается, а через visual studio собралось? (В студии точно выбрана цель ARM и собралось точно под арм, смотрел готовые файлы)
2) Какие все-таки ключи надо прописывать qmake.conf в мк спец в DEFINES ( у меня += UNDER_CE WINCE _WINDOWS _UNICODE UNICODE _WIN32_WCE=0x600 $$CE_ARCH _ARMV4I_ armv4i _ARM_ ARM _M_ARM ARM _WIN32 __arm__ QT_NO_PRINTER QT_NO_PRINTDIALOG по подобию других)
В мануале написано что-то типо "для каждого случая свои ключи". Как понять какие мне нужно под данный SDK?
3) Предположение: в том же qmake.conf
QMAKE_LIBS = corelibc.lib
Может надо прямой путь задавать к этой библиотеке? А то мне кажется, что он цепляет библиотеку x86, а не арм...
4) Почему qmake в qt creator собирает часть под x86, часть под арм и пытается из этого всего собрать что-то одно?
Может надо как-то пути прописывать... Хотя qmake должен как раз сам все прописать...