martedì 30 ottobre 2007

Cross Compilare Qtopia 4.2.4 per Arm

Ho scaricato la toolchain per Arm dal sito di denx
Bruciata la iso su cd, installato l'ambiente, tutto ok.

Poi ho scaricato la Qtopia 4.2.4 opensource dal sito di trolltech a questo link.
Scompattato e fino a qua tutto ok.

Prima di configurare è necessario creare due file nella directory
src/libraries/qtopiabase

i file in questione sono:
custom-linux-arm-g++.h
custom-linux-arm-g++.cpp

Il file custom-linux-arm-g++ è:

#define QPE_NEED_CALIBRATION
#define QPE_USE_MALLOC_FOR_NEW
#define QPE_ARCHITECTURE "arm"
#define QPE_DEFAULT_TODAY_MODE "Daily"

mentre in custom-linux-arm-g++.cpp:

#include <qpowerstatus.h>
#include <qwindowsystem_qws.h>

QTOPIABASE_EXPORT int qpe_sysBrightnessSteps()
{
}

QTOPIABASE_EXPORT void qpe_setBrightness(int bright)
{
}

QTOPIABASE_EXPORT void QPowerStatusManager::getStatus()
{
}

Rappresentano implementazioni vuote di alcuni metodi che servono a Qtopia per gestire alcune caratteristiche del dispositivo, quali la potenza e l'illuminazione dello schermo.

A questo punto, Trolltech consiglia di creare una directory diversa da quella dove risiedono i sorgenti per effettuare configurazione e compilazione. Ho creato una directory build, dalla quale ho lanciato la linea di configure:

configure -arch arm -xplatform linux-arm-g++ -no-infrared -no-helix

Dopo aver accettato la licenza, il configure crea qmake e tutti progetti sia per le cosiddette Qt/embedded che per Qtopia.

A questo punto di può lanciare il make, ma non è finita qua.
Il g++ contenuto nella distribuzione gestisce in modo diverso la definizione di membri statici costanti della classe Zoomer che risiede nella directory src/server/phone/ui

L'errore generato è analogo al seguente:
zoomer_p.cpp:(.text+0x52): undefined reference to `Zoomer::stop1'
zoomer_p.cpp:(.text+0x76): undefined reference to `Zoomer::stop2'
zoomer_p.cpp:(.text+0xae): undefined reference to `Zoomer::growthFactor'

Per far sì che il linking abbia esito positivo, bisogna modificare il file zommer_p.cpp aggiungendo le seguenti linee:

const qreal Zoomer::stop1;
const qreal Zoomer::stop2;
const qreal Zoomer::growthFactor;

A questo punto la compilazione dovrebbe terminare in modo corretto.

Pizza

Nessun commento:

Posta un commento