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

Qt Discussion :

Compilation Qt assembleur g++


Sujet :

Qt

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut Compilation Qt assembleur g++
    Bonjour,

    J'ai une petite application développée en C++ qui utilise les API Windows, et quelques fonctions en assembleur. Je travail depuis Visual C++ 2008 Express, le tout, sous XP. Tout fonctionne correctement en mode console. Je souhaiterais donc adapter mon code à Qt afin de pouvoir fournir une petite interface graphique.

    Je commence donc par compiler mon programme avec Qt.
    - qmake - project
    - qmake
    - make

    Je m'attendais a quelques complication, mais là, je m'en sort pas. Effectivement, premiere erreur, Qt ne semble pas reconnaitre mpn code assembleur. Je vous poste l'erreur :

    main.cpp: In function 'char* bnstrcopy(char* char*)';
    main.cpp:115: error: expected '(' before '{' token
    main.cpp:115: error: expected asm body before '{' token
    main.cpp:116: error: 'mov' undeclared (first use this function)
    ....

    Mon code assembleur étant de la forme :

    char* bnstrcpy(char *dst, char *src)
    {
    __asm
    {
    // MON CODE EN ASSEMBLEUR ...
    }
    }
    Comment faire pour adapter ce code à Qt ? Est-ce possible ?

    Cordialement,
    PKO

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut, c'est un problème liée à ton compilateur, pas à Qt

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Mongaulois > Bonjour, et merci de ta réponse. Ce sujet vient sans doute de perdre sa place dans la section "Qt", néanmoins, sais-tu comment me dépatouiller de ce problème ? Vers quoi dois-je m'orienter ?

    Cordialement,
    PKO

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    malheureusement non.

    Ce qui est bizarre c'est que cela marche en mode console.

    Tu est sur de ne pas avoir oublié un ; ou autre?? Y as t'il d'autre message d'erreur?

    sinon poste dans le forum C++

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Je compile en mode console sous Visual C++ 2008 Express. C'est peut être ça qui diffère. J'ai simplement copié mes sources dans un repertoire différents, et lancé les différentes commandes Qt.

    Les autres messages d'erreurs sont relatifs a la partie de mon code écrite en C++. Mes structures DISK_GEOMETRY_EX ne sont pas reconnue par exemple.

    Je laisse le sujet ici, peut être que quelqu'un pourra m'aider. Si rien de nouveau demain, je déplacerais le tout coté C++.

    Merci encore.
    Cordialement,
    PKO

  6. #6
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Salut,

    Il faudrait que tu nous montres ton code stp (réduit au minimum reproduisant l'erreur). J'utilise VC++2008 et je peux créer puis compiler un project en passant par qmake et nmake en incluant quelques lignes d'assembleur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main(int argc, char **argv)
    {
    	__asm
    	{
    		mov eax, 3
    		push eax
    		pop ebx
    	}
    }
    Commence par voir si un tel snippet compile de ton côté; ensuite, prends ton code et amaigris le de plus en plus jusqu'à ne plus avoir que ça, ou jusqu'à ce que ça marche. L'idée est qu'on ait le minimum à lire pour essayer de situer le problème.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Bonjour.

    J'ai trouvé pourquoi ça ne fonctionne pas.
    Effectivement, comme l'a dit Mongaulois, il s'agit d'un problème lié au compilateur. D'habitude, je compile sous VC++ , et j'ignore quel est le compilateur utilisé.

    Sous mon Qt, le compilateur est g++. Et le problème vient de là. Un code assembleur ne se compile pas de la même manière avec g++ et avec le compilateur de VC++.

    Sous VC++, on intègre un code asm de cette façon :
    int main(int argc, char **argv)
    {
    __asm
    {
    MOV AX, 0x13
    INT 0x10

    }
    }
    Alors qu'avec g++, on fait :
    int main(int argc, char **argv)
    {
    asm
    (
    "MOV $0x13,%AX\n\t"
    "INT $0x10"
    );
    }
    Il y a 2 changements :
    - L'intégration du code lui même. Qui passe de __asm{} à asm();
    - L'assembleur. Effectivement, g++ utilise la notation AT&T pour l'assembleur. Voir =>http://www.delorie.com/djgpp/doc/bre...ine_djgpp.html

    Pour ce que ça rebut de traduire le code assembleur en AT&T, j'ai dégoté un petit outil tout simple, qui traduit automatiquement votre code asm.
    Ce programme se nomme : ta2asv08. Attention, il est tout de même nécessaire de relire la traduction, car ce n'est pas parfait.

    Voila en ce qui concerne ce problème.
    Je posterais un autre topic concernant le reste, afin de ne pas tout mélanger.

    Merci à tous.

    Cordialement,
    PKO

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

Discussions similaires

  1. Compilation gcc assembleur Microblaze
    Par mith06 dans le forum Autres architectures
    Réponses: 2
    Dernier message: 30/10/2012, 11h28
  2. Visual C++ peut-il compiler de l'Assembleur ?
    Par germanium dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 07/06/2007, 19h23
  3. Compiler du code Assembleur avec Visual C++
    Par maria_0009 dans le forum Visual C++
    Réponses: 1
    Dernier message: 14/01/2007, 13h29
  4. Compilation d'un programme C++ / Assembleur
    Par nicolas66 dans le forum C++
    Réponses: 8
    Dernier message: 25/06/2006, 18h53
  5. [68k] Compilation mixte - Assembleur / C
    Par FidoDido® dans le forum Autres architectures
    Réponses: 2
    Dernier message: 10/05/2006, 19h41

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