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

Discussion :

Compilation de Qt en 64 bits avec MinGW

  1. #1
    Membre averti
    Homme Profil pro
    informaticien géomètre
    Inscrit en
    Juillet 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : informaticien géomètre
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2012
    Messages : 20
    Par défaut Compilation de Qt en 64 bits avec MinGW
    Bonjour à tous

    Voici une semaine que j'épluche des pages sur le net et que je fais diverses tentatives pour me familiariser avec la compilation. Mais j'obtiens des résultats plutôt mitigés et j'ai l'impression de me mélanger un peu les pinceaux

    Ce que j'ai actuellement : Windows 7 en 64 bits avec Qt4.8.4 en 32 bits et MinGW. Je développe avec QtCreator 2.6.2.

    Ce qu'il me faut : pouvoir compiler mes programmes en 64 bits (volume de données de plusieurs Go ou traitement d'images >= 16384x16384)

    Ce qu'il me semble avoir compris (sans certitude ) :
    - QtCreator est totalement indépendant du code généré. On peut très bien écrire du code pour du 64 bits avec. [Vrai / Faux]
    - MinGW peut générer du code 32 ou 64 bits [Vrai / Faux]
    - MinGW64 peut générer du code 32 ou 64 bits, mais il est optimisé (le programme MinGW64) pour les plates-formes 64 bits. [Vrai / Faux]
    - Les bibliothèques de Qt4.8.4 sont en 32 bits, donc là ça coince pour créer du code 64 bits. [Vrai / Faux]

    Donc:
    - Vue que je n'ai pas 3200€ à mettre dans une version Qt 64bits déjà compilée. Il faut que je le fasse moi-même.
    - La version 5.1.1 pose des problèmes en 64 bits.
    - Il faut donc que je trouve soit les binaires de Qt 4.8.5 en 64 bits (que je n'ai pas réussi à trouver pour MinGW), soit les sources que je dois me compiler en 64 bits avec MinGW.

    C'est là que ça commence à coincer grave. Pourtant tout semblait simple sur cette page.
    Quand j'exécute la commande configure il faut que je réponde 'o' pour opensource puis 'y' pour accepter la licence et ça démarre sans me laisser le temps de mettre les paramètres. Qu'est-ce que je rate sur ce point ?
    Bien entendu la compilation termine sur erreur.

    Un dernier point, je fais peut-être une erreur en cherchant à utiliser MinGW64 4.8.1 qui semble être fait pour s'accorder avec Qt 5.1.1 ?

    Voilà si une âme charitable pouvait m'aiguiller et me dire si je me fourvoie complétement, je pense que cela pourrai m'aider

    Merci

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par Glandelf Voir le message
    - QtCreator est totalement indépendant du code généré. On peut très bien écrire du code pour du 64 bits avec. [Vrai / Faux]
    à moitié vrai : il dépend de certaines dlls qui doivent être compilées dans la même version que QtCreator (comprend : en version 32bits si tu utilises QtCreator compilé en 32bit, en versino 64bits si tu utilises QtCreator compilé en version 64 bits).

    Mais autrement, QtCreator n'est jamais qu'un EDI, et n'a donc strictement rien à voir avec la manière dont le code de ton projet est généré
    - MinGW peut générer du code 32 ou 64 bits [Vrai / Faux]
    Faux : Pour autant que je sache, MinGW n'est capable de fournir que des exécutables 32bits
    - MinGW64 peut générer du code 32 ou 64 bits, mais il est optimisé (le programme MinGW64) pour les plates-formes 64 bits. [Vrai / Faux]
    La première partie est à moitié vraie : MinGW-w64 peut générer des binaire 32bits et 64bits, s'il est compilé dans la "saveur" multilib.

    La deuxième partie l'est beaucoup moins : il est possible d'avoir une version uniquement 32bits de la chaine d'outils, tout comme il est possible d'en avoir une version 64bits.

    Et comme chaque version peut être compilée dans une saveur qui permet la compilation uniquement 32bit (uniquement 64bits pour la version 64bits) ou dans une version multilib (qui permet de générer du binaire aussi bien 32bits que 64bits), tu as 4 possibilités clairement distinctes
    - Les bibliothèques de Qt4.8.4 sont en 32 bits, donc là ça coince pour créer du code 64 bits. [Vrai / Faux]
    Vrai

    Mais il est tout à fait possible, si ta chaine de compilation le supporte, de compiler Qt (quelle que soit la version) en 64bits
    Donc:
    - Vue que je n'ai pas 3200€ à mettre dans une version Qt 64bits déjà compilée. Il faut que je le fasse moi-même.
    C'est sans doute préférable
    - La version 5.1.1 pose des problèmes en 64 bits.
    Elle est peut etre plus compliquée à compiler, mais elle ne pose aucun problème, je peux te l'assurer
    - Il faut donc que je trouve soit les binaires de Qt 4.8.5 en 64 bits (que je n'ai pas réussi à trouver pour MinGW), soit les sources que je dois me compiler en 64 bits avec MinGW.
    Fut un temps où la section Qt du forum proposait des archives "toutes faites" contenant les dll d'une version particulière de Qt compilée pour un compilateur particulier.

    J'y ai moi meme participé plus ou moins activement en fournissant des versions 64 bits compilées avec MinGW-w64 multilib...

    Mais je ne retrouve plus la page sur laquelle les différentes possibilités étaient reprises (et cela fait un certain temps que le principe a été abandonné, je ne sais pas pour quelle raison).

    Tu devrais pourtant la retrouver en faisant une recherche un peu approfondie

    Mais, pour autant que je sache, les dernières versions de Qt préparées de la sorte étaient au alentours de Qt-4.4.x

    C'est là que ça commence à coincer grave. Pourtant tout semblait simple sur cette page.
    Quand j'exécute la commande configure il faut que je réponde 'o' pour opensource puis 'y' pour accepter la licence et ça démarre sans me laisser le temps de mettre les paramètres. Qu'est-ce que je rate sur ce point ?
    Bien entendu la compilation termine sur erreur.
    Oui.

    Tu dois introduire l'ensemble des paramètres que tu veux changer. Mais bon, généralement, les paramètres choisis par défaut sont plus que corrects
    Un dernier point, je fais peut-être une erreur en cherchant à utiliser MinGW64 4.8.1
    Tu ne feras jamais une erreur en essayant d'utiliser la dernière version stable de n'importe quel compilateur!
    qui semble être fait pour s'accorder avec Qt 5.1.1 ?
    Je n'en ai jamais rêvé, même dans mes pires cauchemars

    L'explication risque d'être ardue, il faudra donc sans doute t'accrocher quelque peu

    Il y a une "nouvelle" norme de C++ (enfin, elle a déjà presque deux ans ) qui a été adoptée et qui s'appelle C++11.

    Les différents compilateurs ont donc commencé à s'adapter pour respecter cette norme.

    La première version de Gcc qui respecte entièrement cette nouvelle norme est Gcc-4.8, les versions précédentes en fournissant un support partiel.

    La norme nous garanti que tout code qui compilait en utilisant "l'ancienne norme" (comprends : la norme C++ d'avant C++11) continuera à compiler avec tout compilateur qui respecte C++11.

    Ainsi, si tu retrouves les sources de Qt3.1, par exemple, tu devrais être en mesure de les recompiler sans aucun problème (quoi qu'il n'est pas impossible que Gcc te trouve de nouvelles erreurs )

    Mais sans remonter à l'antiquité, tu peux sans aucun problème compiler n'importe quelle version antérieure de Qt avec Gcc-4.8.1.

    Ce qui n'est, par contre, absolument pas garanti, c'est la compatibilité binaire des outils.

    Ainsi, si tu essayes d'utiliser une version de Qt-4.4 qui a été compilée en utilisant Gcc-4.1 avec ton tout nouveau Gcc-4-8.1, ca risque de ne pas fonctionner.

    A l'inverse, Qt essaye de "migrer" progressivement vers le respect de la nouvelle norme.

    Seulement, voilà, il était difficile de demander au développeurs de Qt d'écrire du code (respectant la nouvelle norme) qui n'aurait pas été compris par les compilateurs existants.

    Le passage au support de C++11 pour Qt a été décidé au moment où l'on est passé à la version 5.

    Tu ne peux donc plus envisager de compiler Qt-5.x avec un compilateur trop ancien (Gcc-4.1, par exemple), mais l'inverse reste malgré tout vrai

    Si l'on résume:
    1. Tu dois toujours veiller à utiliser les dll (quelle que soit la version de Qt envisagée) qui ont été compilées avec le compilateur qui sera chargé de créer ton exécutable
    2. Tu peux envisager de compiler n'importe quelle version de Qt avec Gcc-4.8.x
    3. Tu risques de ne pas être en mesure de compiler les dernières version de Qt avec un compilateur "ancien"
    4. Un exécutable 64bits nécessite impérativement l'utilisation de bibliothèques compilées en 64bits
    5. un exécutable 32bits nécessite impérativement l'utilisation de bibliothèques compilées en 32bits
    (je crois avoir fait le tour )

    PS : il existe une section dédiée à Qt dans laquelle tu trouveras surement la réponse à de nombreuses question, je déplace cette discussion dés que j'ai fini d'y répondre
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre averti
    Homme Profil pro
    informaticien géomètre
    Inscrit en
    Juillet 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : informaticien géomètre
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2012
    Messages : 20
    Par défaut
    Wouaou ça c'est de la réponse

    Cela clarifie ce que je pensais avoir compris. Mais maintenant il va me falloir un peu de temps pour digérer tout ça
    Les programmes créés ne sont qu'à but de développement interne et de recherche. Pas de distribution. Par contre il faut obligatoirement du 64 bits.

    Donc 2 possibilités :
    - trouver une vieille compile 64 bits qui tourne et m'en contenter.
    - réessayer la compilation de Qt 5.1.1 pour pouvoir profiter des améliorations.
    Sachant que dans les deux cas je vais sûrement avoir à repasser sur le code (déjà plus de 50000 lignes de codes )

    Je prends donc le temps de la réflexion...
    avant de revenir à la charge

    Encore un grand merci pour la réponse rapide et détaillée

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par Glandelf Voir le message
    Wouaou ça c'est de la réponse
    Ecrite avec grand plaisir
    Donc 2 possibilités :
    - trouver une vieille compile 64 bits qui tourne et m'en contenter.
    - réessayer la compilation de Qt 5.1.1 pour pouvoir profiter des améliorations.
    Allez, parce que je suis de bon humeur, j'ai fait une petite recherche...

    Sur cette page, tu trouveras :
    Une version de Qt-4.7 (technical preview) et
    une version de Gcc-4.5. pour aller avec.

    Note bien que ce sont des binaires qui ont maintenant 3ans, et que l'on est donc très loin de disposer le support correct de C++11 (à l'époque, on parlait encore de C++0x ou de C++1x, je ne sais plus) ni de toutes les fonctionnalités actuelles de Qt

    D'ailleurs, comme le terme l'indique, la version de Qt fournie correspond à la dernière étape avant la mise "en production".

    Si cela te convient, n'hésites pas
    Sachant que dans les deux cas je vais sûrement avoir à repasser sur le code (déjà plus de 50000 lignes de codes )
    Pourquoi repasser sur le code

    Comme je te l'ai dit, un code qui compilait avant doit continuer à compiler.

    A moins que tu ne parle de code spécifique à Qt et d'éventuelles fonctions obsolètes ou supprimées
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre averti
    Homme Profil pro
    informaticien géomètre
    Inscrit en
    Juillet 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : informaticien géomètre
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2012
    Messages : 20
    Par défaut
    Merci pour ton implication et ta recherche

    J'ai également fait des recherches de mon coté
    Et j'ai trouvé un Qt 5.1.1 avec Qt creator 2.8.1 et mingw64 déjà tout compilé

    J'avoue je me la fais petit joueur, mais j'avais essayé plusieurs compilations qui avaient toutes échouées, donc...

    Pourquoi repasser sur le code ?

    Comme je te l'ai dit, un code qui compilait avant doit continuer à compiler.

    A moins que tu ne parle de code spécifique à Qt et d'éventuelles fonctions obsolètes ou supprimées ?
    C'est très exactement ça. Du style QMainWindow provoque une erreur de compilation, car il faut rajouter la déclaration QT += widgets. Et j'imagine que ce n'est pas la seule différence.

    J'en ai d'ailleurs une autre qui me gène beaucoup plus, un conflit de déclaration 'typedef double GLdouble' entre gl.h et qopengl.h, mais je me doute que je n'ai pas le droit de faire de modification dans ces classes puisque ce n'est pas moi qui les ai écrites.
    Que faut-il faire dans ce genre de cas ?

    Si quelqu'un à une idée... je prend

    Merci

Discussions similaires

  1. Compilation avec mingw en 64 bits
    Par uriotcea dans le forum Qt
    Réponses: 7
    Dernier message: 02/06/2010, 20h55
  2. Compiler une application utilisant GTK+ avec MinGW
    Par lilivounet dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 19/06/2009, 14h42
  3. Pb compilation GetText avec mingw et VC2005
    Par Grulim dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 17/01/2007, 10h21
  4. Erreur de compilation de boost::date_time avec mingw
    Par shenron666 dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 26/08/2006, 18h18
  5. Réponses: 7
    Dernier message: 07/02/2006, 15h04

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