Installare QTopia oggi ====================== Se avete `GCC 2.95.x`_ installato ================================= Potete seguire le istruzioni di `questo how-to`_, e tutto andrà bene. Se avete una versione successiva ================================ Ad esempio se fate davvero sviluppo in C++, non potete usare una versione del GCC precedente la 3.1, visto che mancano componenti findamentali (stingstream, tanto per dire) e ci sono bug piuttosto grossi. Qui arriva il problema: i pacchetti indicati dallo `how-to di cui sopra`_ sono compilati col GCC 2.95.2, e siccome la ABI è cambiata radicalmente, i programmi compilati con GCC 3.x non passeranno la fase i linking con le librerie qt-embedded. A questo punto bisogna installare il GCC 2.95.2, vero? **Sbagliato!** Il GCC 2.95.2 ha un bug nella libreria libio (base per gli stream C++) per cui non compila con la glibc 2.2 (e visto che avete il GCC aggiornato, avete di sicuro anche la glibc aggiornata) (è cambiato il tipo per gli offset nei file: da int a una struct con due int, per gestire le posizioni a 64 bit). Bisogna usare il GCC 2.95.3, che ha risolto questo problema (a quanto ho capito dalla diff, non supporta i file oltre i 4GB, ma visto che vogliamo compilare programmi che poi andranno sullo Zaurus, non è una gran limitazione) (la ABI del .3 è la stessa del .2). A questo punto vogliamo però che il 2.95 non sovrascriva il nostro 3: vogliamo installarlo in una directory a parte. Questo si ottiene specificando l'opzione --prefix allo script configure. Istruzioni passo-passo ---------------------- I pacchetti già fatti ````````````````````` Scaricate: * `gcc 2.95.2 cross compiler x86-arm`_ * `binutils 2.11.2 cross x86-arm`_ * `glibc 2.2.2 arm`_ * `header Linux 2.4.6 arm`_ * `QTopia 1.5.0 free edition, sia x86 che arm`_ Installateli tutti (con rpm, a nome di root). Si creeranno le directory /opt/Embedix con la toolchain per arm, e /opt/Qtopia con le librerie e i programmi per compilare sia x86 che arm. Il GCC `````` Scaricate gcc-core-2.95.3.tar.gz e gcc-g++-2.95.3.tar.gz da un `mirror GNU`_. Per compilare (suppongo che abbiate messo i pacchetti del GCC nella /tmp): * cd /tmp * tar zxvf gcc-core-2.95.3.tar.gz;tar zxvf gcc-g++-2.95.3.tar.gz * mkdir gcc-obj;cd gcc-obj * ../gcc-2.95.3/configure --prefix=/opt/Embedix/native --enable-shared * make bootstrap * make install (questo dovreste farlo a nome di root, oppure aver dati permessi in scrittura al vostro utente normale su /opt/Embedix) È un po' strano mettere il compilatore nativo sotto /opt/Embedix, ma mi sembra comodo per chiarire in quale contesto lo uso. Gli script `````````` Fanno comodo un paio di script per impostare variabili d'ambiente nei due casi: compilazione nativa (durante lo sviluppo) e cross-compile (alla fine, per trasferire il programma sullo Zaurus) Prendete quelli forniti dalla Sharp: `dev-x86-qpe`_ e `dev-arm-qpe`_. In dev-x86-qpe cambiate le righe che impostano PATH e LD_LIBRARY_PATH con queste: :: PATH=$QTDIR/bin:$QPEDIR/bin:/opt/Embedix/tools/bin:/opt/Embedix/native/bin:${ORG_PATH} LD_LIBRARY_PATH=$QTDIR/lib:/opt/Embedix/native/lib:${ORG_LD_LIBRARY_PATH} .. In questo modo verrà usato il GCC 2.95.3 che abbiamo appena compilato. .. _`dev-x86-qpe`: http://docs.zaurus.com/downloads/dev-x86-qpe.sh .. _`mirror gnu`: http://www.gnu.org/server/list-mirrors.html .. _`qtopia 1.5.0 free edition, sia x86 che arm`: http://docs.zaurus.com/downloads/qtopia-free-1.5.0-1.i386.rpm .. _`binutils 2.11.2 cross x86-arm`: http://docs.zaurus.com/downloads/binutils-cross-arm-2.11.2-0.i386.rpm .. _`how-to di cui sopra`: http://docs.zaurus.com/linux_compiler_setup_howto.shtml .. _`questo how-to`: http://docs.zaurus.com/linux_compiler_setup_howto.shtml .. _`glibc 2.2.2 arm`: http://docs.zaurus.com/downloads/glibc-arm-2.2.2-0.i386.rpm .. _`header linux 2.4.6 arm`: http://docs.zaurus.com/downloads/linux-headers-arm-sa1100-2.4.6-3.i386.rpm .. _`dev-arm-qpe`: http://docs.zaurus.com/downloads/dev-arm-qpe.sh .. _`gcc 2.95.x`: http://gcc.gnu.org/gcc-2.95/ .. _`gcc 2.95.2 cross compiler x86-arm`: http://docs.zaurus.com/downloads/gcc-cross-sa1100-2.95.2-0.i386.rpm