3 votes

Construction d'applications QT pour arm linux

Je suis un peu perdu lorsqu'il s'agit de QT et de la compilation croisée pour mon arm-linux :

Pour l'instant, j'ai un linux qui tourne sur mon AT91SAM9263-EK et un logiciel approprié. système de fichiers approprié, y compris les librairies QT construites via buildroot.

J'ai aussi construit QT-4.8 sur mon ubuntu.

Maintenant, je veux construire une application d'exemple :

  1. J'ai créé un makefile dans un dossier d'exemples dans QT sur mon ubuntu en utilisant qmake ; j'ai utilisé le qmake.conf donné dans mkspecs/qws/linux-arm-g++.

  2. en exécutant make j'obtiens une erreur parce qu'il inclut qatomic_i386.h et le message "error : impossible constraint in 'asm'". ce fichier d'en-tête ne correspond évidemment pas à ma chaîne d'outils arm.

ma question : comment configurer Qt sur mon ubuntu pour construire des binaires Qt pour mon linux embarqué sur arm ? Dois-je inclure les librairies construites par la chaîne d'outils Arm ?

Toute aide est appréciée !

salutations

EDIT : J'utilise le drapeau -spec et passe le chemin vers "mkspecs/qws/arm-linux-g++" où se trouve le fichier "qmake.conf". Je n'ai rien changé ici car je ne sais pas quelles variables qmake sont pertinentes pour lier mes librairies liées à l'arm. Donc le bon compilateur est utilisé, ce que j'ai pu vérifier lorsque le processus make démarre. Mais j'ai observé que dans un fichier de configuration appelé qconfig.h il y a un drapeau ARCH qui est mis à i386 mais je n'ai pas compris comment on peut le configurer. Je ne pense pas que je doive modifier manuellement ce fichier.

EDIT2 : quelqu'un sait ce qui se cache derrière le fichier qconfig.h ? dois-je l'ajuster manuellement ?

5voto

hannes ach Points 99

Je vais le résoudre par moi-même :)

Après avoir lutté pendant un certain temps et avoir parcouru le web, je me suis un peu plus impliqué dans la façon dont tout fonctionne ensemble. Je ne comprenais pas comment générer un exécutable pour mon périphérique cible ARM. J'ai compris deux choses :

  1. n'ajoutez pas votre chemin QT pour X11 au début de votre variable PATH. Cela pourrait perturber votre compilation croisée.

  2. Modifiez le fichier qmake.conf en conséquence. Ajoutez vos librairies construites pour le périphérique cible qui dans mon cas sont situées dans buildroot. Ajoutez ces lignes à votre fichier qmake.conf :
    QMAKE_CFLAGS += -O3 -march=armv5te
    QMAKE_CXXFLAGS += -O3 -march=armv5te
    QMAKE_INCDIR_QT = /home/user/arm/toolchain/buildroot-2010.11/output/staging/usr/include
    QMAKE_LIBDIR_QT = /home/user/arm/toolchain/buildroot-2010.11/output/staging/usr/lib

Je l'ai fait fonctionner maintenant. Merci à tous !

0voto

Luca Carlon Points 6861

Oui, soit vous fournissez les bibliothèques Qt dans votre toolchain, soit vous indiquez à qmake où les trouver. Aussi, je soupçonne que vous appelez qmake sans les paramètres -spec. Si vous utilisez le qmake que vous trouvez dans votre distribution, il utilisera la spécification par défaut, ce qui n'est pas un bras je suppose. Ajoutez le paramètre -spec et dirigez-le vers le mkspec arm. Assurez-vous également que les commandes g++ générées sont liées aux librairies Qt correctes compilées pour arm.

-3voto

liuyi.luo Points 1199

Vous devez installer QtSDK pour linux embarqué avant de l'utiliser pour construire votre application. J'ai bien peur que vous ayez juste QtSDK pour x86 en ce moment. Après QtSDK pour linux embarqué installé, il a qws/linux-arm-g++ comme mkspace par défaut typiquement. Si vous n'avez pas QtSDK pour linux embarqué, vous pouvez le construire à partir des sources. Ensuite, exécutez qmake pour créer un Makefile pour votre application.

$QTDIR_FOR_ARM/qmake

Référence : Installation de Qt pour Linux embarqué y Compilation croisée de Qt pour les applications Linux embarquées

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X