La compilation sous Qt
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

La compilation sous Qt



  1. #1
    jojo150393

    La compilation sous Qt


    ------

    Bonjour,
    voila je viens demander votre aide car je n'arrive pas à trouver de réponse claire sur internet.
    Version de Qt : 5.0
    IDE : Qt creator
    Plateforme de dev : windows
    Compatibilité du programme: windows

    1er Question :
    Pourquoi n'utilise t'on pas toujours une compilation statique ? En effet même si celà crée un fichier .exe assez conséquent, ça serait bien plus simple pour les utilisateurs non ?

    2e Question :
    Comment faire un compilation statique sous Qt ? Si possible, j'aimerais le faire directement depuis Qt creator.

    3e Question :
    Pour une compilation dynamique, ne peut on pas dire à Qt d'aller directement chercher les .dll qu'il à envie et ou il à envie et de les placer dans le dossier release de compilation ? ça serait tellement plus simple que de faire des testes pour voir chaque dll que le programme à besoin...

    4e Question :
    Une question plus théorique cette fois : Si il y à des arguments contre la compilation statique, alors ne serait il pas plus simple pour windows d'avoir un dossier spéciale avec tous les dll qu'il à besoin et de faire pointer les programmes vers ce dossier ?

    Voila, je sais que mes questions peuvent paraître naïve mais je trouve la compilation sur pc vraiment pénible et pas du tout intuitive.

    En espérant avoir des réponses à mes questions, merci pour votre aide.

    -----
    Dernière modification par jojo150393 ; 24/02/2013 à 20h34.

  2. #2
    whoami

    Re : La compilation sous Qt

    bonjour,

    1 - Personne ne se trouve dans ton dos avec un fusil pour t'empêcher de toujours compiler en statique.

    2 - Pour le faire, il faut retrousser ses manches, et compiler les sources de Qt en statique.

    3 - Si tu tiens à réécrire windows, libre à toi.

    4 - idem


  3. #3
    lou_ibmix_xi

    Re : La compilation sous Qt

    Salut, ma réponse de linuxien:

    Une mise au point, j'imagine que lorsque tu parles de "compilation statique" tu fais référence à l'édition de lien:
    - édition de lien statique: tu compiles toutes les sources de ton programme, puis l'éditeur de lien les rassembles avec les versions statiques des bilbliothèques utilisées en un seul gros exécutable "auto-suffisant"
    - édition de lien dynamique, tu compiles ce les sources de ton programme, l'éditeur de lien rassebles tes objets avec les "entrées" des bibliothèques que tu utilises, mais appelle les fonctions des bibliothèques au moment de l'éxécution.

    Pour essayer de schématiser, avec une édition de lien dynamique, les fonctions des bibliothèques externes que tu utilises sont des coquilles vides remplies au moment de l'éxécution.

    Pour répondre de manière plus précise à tes interrogations:

    1°) L'utilisateur n'est pas le développeur, et ce n'est pas franchement compliqué pour le développeur de compiler avec les versions dynamiques des bibliothèques... En revanche ça change enormément de chose pour l'utilisateur:
    - certaines bibliothèques sont utilisées par des milliers de programmes (la bibliothèque standard est utilisée par tous les programmes par exemple), si le comportement par défaut était l'utilisation des bibliothèques statiques, au lieu d'occuper une seule fois l'espace disque nécessaire à ta bibliothèque, tu multiplies par le nombre de programmes qui l'utilisent!
    - et bien pire, tu découvres un bug dans une bibliothèques statiques, tu es alors obligés de recompiler et redéployer tout les programmes l'utilisant, avec une bibliothèque dynamique, tu ne recompiles et redéploies que la bibliothèque concernée...

    3°) Je ne comprends pas vraiment ta question, _TU_ sais les bibliothèques que _TU_ utilises dans ton programme, c'est à toi de les ajouter au projet, ou makefile ou tout autre outils utilisés pour la génération de ton exécutable. Qt n'a envie de rien, Qt est une collection de bibliothèques, avec 2 ou 3 outils pour te faciliter la vie. Je ne pâs t'aider avec Qt-Creator, je ne le connais pas, par contre l'utilisation de qmake + le fichier '.pro' que tu dois écrire est plutôt simple...

    4°) Pour les inconvéniens des bibliothèques statiques lire au-dessus. Pour le monde windows, je ne sais pas comment ça marche, mais pour ce qui est d'UNIX (et LINUX en particulier), c'est à peu prêt ce qu'il se passe, les bibliothèques dynamiques se trouvent dans plusieurs dossiers propres (/lib, /usr/lib etc...). Mais ça n'empêche pas au développeur de préciser à l'édition de lien de préciser les bibliothèques dont il se sert, on pourrait éventuellement envisagé de se passer de ça mais alors j'imagine que le temps passé à l'édition de lien explose puisqu'il faudra scanner toutes les bibliothèques pour trouver chaque symbole. Déjà que certain projet peuvent-être long à compiler! Tout ça pour un flemmard de développeur!

    Voila, je sais que mes questions peuvent paraître naïve mais je trouve la compilation sur pc vraiment pénible et pas du tout intuitive.
    Ce n'est pas une question naïve pour un débutant, et la compilation, comme le "métier" de développeur ne sont pas forcément intuitifs, la mécanique automobile ou la maçonnerie non plus... En revanche, je déconseille aux nouveaux d'utiliser un IDE, mais plutôt de se faire le makefile à la main (ou le fichier ".pro" + qmake pour Qt), pour comprendre un minimum les étapes de la Compilation (preprocesseur -> compilation -> édition de lien), avant de se faire mâcher le boulot par un IDE.

  4. #4
    lawliet yagami

    Re : La compilation sous Qt

    Bonjour,
    @whoami
    C'est quoi le rapport entre "réécrire windows" et savoir si il existe une option sur Qt créator qui permet de récupérer les dll nécessaire au .exe automatiquement plutôt que de cliquer dessus et avoir "warning il manque qtmachinchose.dll" ?

  5. A voir en vidéo sur Futura
  6. #5
    whoami

    Re : La compilation sous Qt

    Bonjour,

    C'était une plaisanterie pour rappeler qu'il faut aussi y mettre du sien plutôt que d'attendre une réponse sur un forum.

  7. #6
    jojo150393

    Re : La compilation sous Qt

    Whoami non mais sérieux tu penses vraiment que je me donne la peine de poser une question sur un forum sans avoir cherché la réponse avant ?
    Si c'est pour dire "trouve par toi même" à chaque fois que quelqu'un à une question alors ça sert vraiment à rien de rester sur un forum. Donc merci de ne pas polluer mon post et si tu trouves que ma question est ridicule alors passe ton chemin.

    lou_ibmix_xi Merci vraiment pour ta réponse clair. En fait c'est les arguments que j'étais sur que tous le monde aller me sortir mais ils ne me conviennent pas vraiment.
    En fait je suis plutôt habitué à la programmation et nottament sur microcontrolleur et microprocesseur et bizarrement je trouve cette compilation plus aisé car les sources sont bien définie à une endroit et après suffit simplement d'une ligne pour compiler.

    En fait Qt est bien plus qu'un ide c'est un framework et ce que je voulais (question 3) c'est exactement ce que lawliet yagami à reformuler. Et en fait non je sais justement pas quel .dll j'utilise c'est justement ça le problème. Le seul moyen de savoir est de lancer le programme. A chaque fois qu'il manque un .dll il plante et il affiche une erreur avec le nom du dll. Mais parfois il plante sans donner le nom du dll manquant et je dois les ajouter par élimination... (laborieux je sais mais je ne connais justement pas d'autre méthode plus simple)

    Pour la question 1, je suis d'accord sur le faite que ça augmente l'espace. Mais la compilation dynamique n'est-elle pas pareil à par que les .dll sont à la racine du programme au lieu d'être inclut dedans ?

    Et donc du coup pour revenir à l'éssentielle, comment compiler en statique avec Qt creator ? (car windows.cmd() = )

  8. #7
    lou_ibmix_xi

    Re : La compilation sous Qt

    En fait je suis plutôt habitué à la programmation et nottament sur microcontrolleur et microprocesseur et bizarrement je trouve cette compilation plus aisé car les sources sont bien définie à une endroit et après suffit simplement d'une ligne pour compiler.
    Mes remarques:
    - premièrement un programme pour micro-contrôleur ne se déploie pas de la même manière: on flash un seul programme, et l'infrastructure logiciel sous-jacente est en générale peu évoluée, donc la mise en place d'un système de bibliothèque dynamique est compliquée et peu pertinante.
    - deuxièmement, je fais également des programmes pour de l'embarqué (ARM7 + eCos, CORTEX-M4 + FreeRTOS, msp430 + FreeRTOS), les programmes que je développe ne sont pas triviaux, et d'un projet sur l'autre je réutilise certains sous-ensembles logiciels, cela impose un processus de compilation aussi "compliqué" que pour un programme sous linux (perso je me fais les makefiles à la main, ou bien des scripts shell pour générer les makefiles). De plus, les IDE (pour PIC ou n'importe quelle autre bestiole du genre) te "cache" la configuration de la génération de l'exécutable, ce qui doit certainement participer à ta sensation de "simplicité"

    En fait Qt est bien plus qu'un ide c'est un framework et ce que je voulais (question 3) c'est exactement ce que lawliet yagami à reformuler.
    Si on veut être précis sur les termes: Qt n'est absolument pas un IDE, mais tu peux utiliser Qt-Creator (qui lui est un IDE), ou n'importe quel IDE de ton choix, voir pas du tout (ce que je fais moi).

    A chaque fois qu'il manque un .dll il plante et il affiche une erreur avec le nom du dll. Mais parfois il plante sans donner le nom du dll manquant et je dois les ajouter par élimination... (laborieux je sais mais je ne connais justement pas d'autre méthode plus simple)
    Alors là je ne sais pas comment tu te débrouilles, mais je pense que tu as rater une configuration quelque part. Si tu parles des bibliothèques propre à Qt, je pense que tu n'as pas configurer comme il faut les variables d'environement système de windows et/ou ton ide pour qu'ils aillent chercher à l'exécution / à la compilation, les bibliothèques Qt là où elles sont installées. Vraissemblablement l'IDE c'est bon (sinon tu n'auras pas pu compiler). Je ne peux pas t'aider plus, je ne travaille plus sous windows depuis une bonne demi-douzaine d'années... De manière générale, lorsque tu utilises une bibliothèque, à la compilation tu as besoin des entêtes (.h) et du descripteur de la bibliothèque (.lib sous windows si je me rappelle bien, sous linux, c'est la bibliothèque elle-même), puis à l'exécution, uniquement de la bibliothèque, mais le système doit savoir où la trouver, mais là encore je ne sais pas comment ça se matérialise sous windows... Pour éviter de jouer aux devinettes, si il existe l'équivalent de "ldd" pour windows, il est fait pour ça, il listera les bibliothèques qu'utilise ton exécutable.

    Pour la question 1, je suis d'accord sur le faite que ça augmente l'espace. Mais la compilation dynamique n'est-elle pas pareil à par que les .dll sont à la racine du programme au lieu d'être inclut dedans ?
    Ce n'est pas la compilation qui est statique ou dynamique mais bien l'édition de liens... Et non ce n'est pas pareil, une bibliothèque statique sera encapsulée dans l'exécutable l'utilisant, donc si 2 programmes différents utilisent la même bibliothèque statique, l'occupation est double. Une bibliothèque dynamique est, normalement, en un seul exemplaire sur le système, dans un répertoire regroupant toutes les bibliothèques dynamiques... Bon sous windows, il paraît que c'est un peu le foutoir (le fameux dll-hell), et beaucoup de monde diffuse leurs applications avec les toutes les bibliothèques utilisées, j'avoue je le fais moi même lorsque je je dois faire une application windows. C'est parce qu'il n'y a pas de manière simple (à ma connaissance et à celle de beaucoup d'autre) pour savoir si la bibliothèque que j'utilise est déjà présente sur le système ou pas...

    Et donc du coup pour revenir à l'éssentielle, comment compiler en statique avec Qt creator ? (car windows.cmd() = )
    Comme je te l'ai dit plus haut, je pense que tu as loupé une étape de la configuration du système / de l'IDE, reprends calmement le tutoriel sur l'installation de Qt et je pense que tout rentrera dans l'ordre... avec des bibliothèques dynamiques... Si maintenant tu veux absolument utiliser les bibliothèques statiques (ce que je te déconseille encore une fois, puisque ce n'est vraiment pas la bonne façon de faire), il te faut trouver les verions statiques des bibliothèques que tu utilises, les ajouter à ton projets et recompiler. Si Qt ne fournit pas es versions statiques de ses bibliothèques, à toi de les recompiler...

  9. #8
    jojo150393

    Re : La compilation sous Qt

    Merci bien d'avoir prit le temps d'écrire ces explications très clair. Je pense que je vais faire mon makefile à la main ça sera plus simple (ou en tout cas plus clair).

    Merci encore !

Discussions similaires

  1. Problème de compilation sous GNU Prolog
    Par inviteff53e475 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 28/06/2012, 14h52
  2. Compilation des directives sous MPLABIDE
    Par boy30 dans le forum Électronique
    Réponses: 4
    Dernier message: 28/05/2012, 08h57
  3. PB de compilation
    Par invitef97198f3 dans le forum Électronique
    Réponses: 1
    Dernier message: 20/05/2010, 12h10
  4. Si l'on veut faire de la compilation de logiciel libre sous windows...
    Par invitec77afd19 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 17/06/2008, 18h20
  5. Matlab-Compilation-Erreur sous Win 2000
    Par inviteaf2e78df dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 16/10/2005, 14h04
Découvrez nos comparatifs produits sur l'informatique et les technologies.