IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Plateformes Discussion :

[Arm] Compilation Qt-4.7.0 avec Phonon/GStreamer


Sujet :

Plateformes

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 69
    Points : 41
    Points
    41
    Par défaut [Arm] Compilation Qt-4.7.0 avec Phonon/GStreamer
    Bonjour,

    Actuellement sous Ubuntu 10.4, je souhaite cross-compiler (x86 vers arm-v4) des applications en Qt qui utilisent Phonon ainsi qu'OpenSSL.
    J'ai installé et configuré scratchbox afin de récupérer le cross-compilateur gcc ainsi qu'un environnement de test/émulation (QEmu).
    J'ai compilé un hello world simple (sans Qt) dans scratchbox et je l'ai transféré sur ma carte, ça a marché.
    J'ai compilé maintes fois le framework Qt en expérimentant plusieurs configurations...
    La première fois avec Qt-4.6.3, je parviens à compiler/executer la plupart des exemples venant de Qt.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ./configure -embedded arm -xplatform qws/linux-arm-g++ \
        -prefix /usr/local/Trolltech/Qt-4.6.3-arm \
        -opensource -little-endian
    Sauf qu'il n'y a pas Phonon. Et là, ça se complique, j'apprends que Phonon est en fait une abstraction et qu'il repose sur un "backend". Sous Linux, le "backend" par défaut est basé sur gstreamer. Ainsi, je télécharge la plupart des sources que Qt me demande et les cross-compile dans scratchbox (./configure && make && make install)
    La liste des bibliothèques requises: glib, gstreamer, gst-plugins, openssl, xml2.

    Mon script de configuration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    #!/bin/sh                                                                                                                      
     
    scratchboxUser='leflou'
     
    ./configure -v -embedded arm -xplatform qws/linux-arm-gnueabi-g++ \
        -opensource -little-endian \
        -prefix /usr/local/Trolltech/Qt-4.7.0-arm \
        -I /scratchbox/users/$scratchboxUser/targets/Arm/usr/local/include \
        -I /scratchbox/users/$scratchboxUser/targets/Arm/usr/local/include/glib-2.0 \
        -I /scratchbox/users/$scratchboxUser/targets/Arm/usr/local/include/libxml2 \
        -I /scratchbox/users/$scratchboxUser/targets/Arm/usr/local/include/gstreamer-0.10 \
        -I /scratchbox/users/$scratchboxUser/targets/Arm/usr/local/include/gstreamer-0.10/gst \
        -I /scratchbox/users/$scratchboxUser/targets/Arm/usr/local/include/gstreamer-0.10/gst/interfaces \
        -I /scratchbox/users/$scratchboxUser/targets/Arm/usr/local/ssl/include \
        -L /scratchbox/users/$scratchboxUser/targets/Arm/usr/local/lib \
        -L /scratchbox/users/$scratchboxUser/targets/Arm/usr/local/ssl/lib \
        -rpath -lssl -lcrypto -lz -lxml2 -lgmodule-2.0 -lgobject-2.0 -lglib-2.0 -lgthread-2.0 -lgstreamer-0.10 \
        -nomake demos -nomake example -make tools \
        -multimedia -audio-backend -phonon -phonon-backend -glib \
        -no-mmx -no-3dnow -no-sse -no-sse2 \
        -no-largefile -no-gtkstyle -no-qt3support -no-cups -no-nis
    La compilation du framework fonctionne mais lorsque j'éxécute un binaire cross-compilé avec cette configuration, ça "segfault"...

    Voici le code source de l'exemple incriminé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    #include <QDebug>                                               
    #include <QPushButton>
    #include <QApplication>
     
    int main(int argc, char** argv)
    {
      qDebug() << "Before everything...";
      QApplication* app = new QApplication(argc, argv);
      qDebug() << "QApplication created";
      QPushButton* hello = new QPushButton("Hello World !");
      qDebug() << "QPushButton created";
     
      QObject::connect(hello, SIGNAL(clicked()), app, SLOT(quit()));
      qDebug() << "QObject connected !";
     
      hello->move(50, 50);
      qDebug() << "QPushButton move";
     
      hello->resize(300, 100);
      qDebug() << "QPushButton resize";
     
      hello->show();
      qDebug() << "QPushButton shows up !";
     
      qDebug() << "Before app exec";
      const int ret = app->exec();
      qDebug() << "After app exec";
      delete hello;
      delete app;
      return ret;
    }
    Une Segmentation fault se produit sur l'instruction hello->show().
    Pourtant les dépendances ont été vérifiées (via ldd).
    On ne peut que compiler en release, et lorsque je lance gdb depuis la carte sans surprise il m'indique l'erreur de segmentation mais sans symbole donc c'est inexploitable...

    Actuellement je recompile Qt au sein de scratchbox en tentant d'utiliser l'option force-pkg-config:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #!/bin/sh                                                                                                                      
     
    export TARGET_STAGING_PATH=/
    export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
    export PKG_CONFIG_SYSROOT=$TARGET_STAGING_PATH
     
    ./configure -v -embedded arm -xplatform qws/linux-arm-gnueabi-g++ \
        -prefix /usr/local/Trolltech/Qt-4.7.0-arm \
        -opensource -little-endian -force-pkg-config \
        -multimedia -glib -phonon -phonon-backend \
        -no-mmx -no-3dnow -no-sse -no-sse2 -no-opengl \
        -nomake demos -nomake example -make tools \
        -no-largefile -no-qt3support -no-gtkstyle -no-cups -no-nis
    Si un développeur a déjà cross-compilé une appli du style qmediaplayer sur ARM, un coup de pouce serait vraiment sympa

    Désolé d'avoir écrit un aussi long post mais je pense que plus l'on est précis plus la résolution est simple.

    Cordialement,

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 69
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    Pour apporter davantage de précisions, cette configuration marche avec la version 4.6.3 de Qt ("cross-compilée" avec scratchbox):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    #!/bin/sh
     
    scratchboxUser='leflou'
     
    ./configure -v -embedded arm -xplatform qws/linux-arm-g++ \
        -opensource -little-endian \
        -prefix /usr/local/Trolltech/Qt-4.6.3-arm \
        -I /scratchbox/users/$scratchboxUser/targets/Arm/usr/local/include \
        -I /scratchbox/users/$scratchboxUser/targets/Arm/usr/local/include/glib-2.0 \
        -I /scratchbox/users/$scratchboxUser/targets/Arm/usr/local/include/libxml2 \
        -I /scratchbox/users/$scratchboxUser/targets/Arm/usr/local/include/gstreamer-0.10 \
        -I /scratchbox/users/$scratchboxUser/targets/Arm/usr/local/include/gstreamer-0.10/gst \
        -I /scratchbox/users/$scratchboxUser/targets/Arm/usr/local/include/gstreamer-0.10/gst/interfaces \
        -I /scratchbox/users/$scratchboxUser/targets/Arm/usr/local/ssl/include \
        -L /scratchbox/users/$scratchboxUser/targets/Arm/usr/local/lib \
        -L /scratchbox/users/$scratchboxUser/targets/Arm/usr/local/ssl/lib \
        -rpath -lssl -lcrypto -lz -lxml2 -lgmodule-2.0 -lgobject-2.0 -lglib-2.0 -lgthread-2.0 -lgstreamer-0.10 \
        -multimedia -audio-backend -phonon -phonon-backend -glib \
        -nomake demos -nomake example -make tools \
        -no-mmx -no-3dnow -no-sse -no-sse2 \
        -no-svg -no-script \
        -no-largefile -no-gtkstyle -no-qt3support -no-cups -no-nis
    En revanche, la compilation avec la 4.7.0 fonctionne sans encombres mais lorsque j'execute un binaire compilé avec cette version il provoque irrémédiablement une erreur de segmentation.

    Utiliser la version 4.7.0 est important car les différents modules de QtMobility ne sont pas compatibles avec la 4.6.3...

    Cordialement,

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 69
    Points : 41
    Points
    41
    Par défaut Solution
    Bonjour,

    Le problème viendrait apparemment de Freetype (j'ignore la raison).
    En effet, si l'on rajoute -no-freetype dans le fichier de configuration les "segfault" disparaissent. C'est une solution temporaire, si quelqun trouve mieux je suis preneur.

    Cordialement,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/10/2011, 20h52
  2. Compilation de report en erreur avec Ant
    Par ltournayre dans le forum Jasper
    Réponses: 1
    Dernier message: 10/08/2006, 11h33
  3. compiler en ligne de commandes avec dev-cpp
    Par yashiro dans le forum Dev-C++
    Réponses: 8
    Dernier message: 30/03/2006, 19h14
  4. Compiler un projet d'Unix avec Visual .NET
    Par Captain_JS dans le forum MFC
    Réponses: 1
    Dernier message: 05/02/2006, 23h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo