Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.9.1 - Qt Creator : 4.4.0 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

Comment faire partager son appli

Bonjours a tous, voilà j'ai créer un répertoire téléphonique que je voudrais faire partager sur internet, le problème est que lorsque je lance le .exe sur un autre pc, il me demande certaine dll de qt et le logiciel prend alors beaucoup de place.

Est-ce obligatoire de mettre les dll demander ou y a t il un moyen pour ne pas les mettre.

Merci pour vos reponse.

Réponses

  • slame said:
    Bonjours a tous, voilà j'ai créer un répertoire téléphonique que je voudrais faire partager sur internet, le problème est que lorsque je lance le .exe sur un autre pc, il me demande certaine dll de qt et le logiciel prend alors beaucoup de place.

    Est-ce obligatoire de mettre les dll demander ou y a t il un moyen pour ne pas les mettre.

    Merci pour vos reponse.
    Tu n'as pas besoin de toutes les dlll ou .so, livre uniquement les dll/.so utilisées par ton appli.
    Sinon tu peux compiler en statique.
  • Qu'entends-tu par beaucoup de place?
  • Merci pour la réponse, je n'ai jamais compiler en statique peut tu m'expliquer comment faire avec Qt Creator ?

    Merci encore.
  • Pour la place sa ajouter environ 100Mo de dll....... Donc pas top pour une appli aussi petite...
  • June 2009 modifié
    C'est sur que si tu mets les dll de debug ça va prendre de la place :rolleyes:.
    On distribue toujours un exe compilé en release.
    Compilé en statique, ça va permettre de ne pas mettre les dll avec mais ça va augmenter la taille ton exe.
  • J'ai aussi essayer avec une version release mais le résultat est le même l'appli me demande les dll...
  • Oui mais si tu fais attention, il te demande pas les même dll, il te demande celle sans le petit d. Et ces dll la ne font que quelque mega.
  • D'accord, je te remercie pour tes réponse.
  • Déplacer en programmation => pas une présentation de projets :/
  • Je profite de ce thread pour vérifier un truc :
    J'ai toujours pensé que compiler en static ne faisait que "copier" les dll dans l'exe final, et que donc taille(exe + dll) == taille(exe en static). Mais j'ai entendu dire qu'en fait ce n'était pas tout à fait vrai. Quelqu'un aurait un retour d'une appli qu'il a fait et compilé dans les 2 ? slame tu as essayé ?
  • En fait quand tu compiles en static le code nécessaire est copier dans l'exe. Donc si tu n'utilises pas toutes les fonctions de la librairie tout le code ne sera pas copié. Mais après l'intérêt des dll c'est d'être partageable avec d'autres appli et donc de diminuer l'espace occupé lorsque plusieurs appli utilisent les mêmes dll.
  • Oui mais finalement pas mal d'applis sous qt sont fournies avec les dll dans le dossier d'install, et non pas copiées dans un répertoire partagé genre win32
    Par exemple j'ai 3 fois le fichier mingw10.dll !
    A ce compte là ils auraient mieux fait de compiler en static ...

    Je vais militer pour le static :D
  • Il est vrai que ce sous Windows les programmes sont livrés avec les dll plus souvent que sur d'autre plateforme car il n'y a pas de gestion centralisée des "paquets" comme dans la plus part des distrib Linux.
    Il y a plusieurs raisons:
    - Chaque programme est compilé avec une version de la dll et donc pour éviter des bugs liés à l'utilisation de versions différentes, les développeurs préfèrent mettre les bonnes dll avec l'exe.
    - Certains programmes ne sont pas monolithique, et donc plusieurs binaires (exe ou lib) d'un même soft peuvent du coup utiliser un même dll.
    - Certaines fonctionnalité de Qt ne sont pas disponible en static comme les le système de plugins par exemple.

    De plus l'argument de gagner quelques mega en static est bidon à l'heure actuelle (70€ le To).
  • braindeadbzh said:
    De plus l'argument de gagner quelques mega en static est bidon à l'heure actuelle (70€ le To).
    Oui, mais quid des études qui prouvent que l'arrêt en cours d'un téléchargement car trop long est exponentiellement décroissant par rapport à la taille du logiciel ? Pas si bidon que ça :)
    Il faudrait avoir des vrais stats pour des application de quelques dizaines de Mo.
  • Oui mais la c'est à toi d'héberger ton site chez un vrai hébergeur qui peut soutenir les débits actuels. Car même si tu as à télécharger 100Mo (exemple SDK Qt) du moment que ta bande passante est blindé tu vas rien dire, par contre si tu vois que ça download à 10% de la capacité, la tu pètes un câble.
  • Moebius said:
    Oui mais finalement pas mal d'applis sous qt sont fournies avec les dll dans le dossier d'install, et non pas copiées dans un répertoire partagé genre win32
    Par exemple j'ai 3 fois le fichier mingw10.dll !
    A ce compte là ils auraient mieux fait de compiler en static ...

    Je vais militer pour le static :D
    Je ne connais plus la séquence exacte pour windows, mais il cherche dans plusieurs endroits différent la dll dont a besoin ton soft.
    En gros, a titre d'exemple, si la dll est déjà en mémoire il l'utilise sinon s'il l'a trouve dans win32 il là charge, s'il la trouve pas il charge la ddl se trouvant dans le path de ton exec.
    C'est un séquence de ce genre, une recherche dans le MSDN devrait donner la réponse précise.
  • Il prend en priorité la DLL qui se situe à côté de l'exe (sinon aucun intérêt, et c'est pareil sur les autres plateformes). Après effectivement si la DLL est déjà chargée il va utiliser celle en mémoire, par contre la je sais pas trop comment il identifie les versions différentes.
  • Je suis assez d'accord avec braideadbzh: sous windows, la gestion des dépendances est pitoyable (troll inside).

    J'ai au moins 5 Framework .NET, 3 machines java complètes, et je ne compte plus les lib Qt et Mingw (outre les skype, autocad et autre google earth, chacun y va de sa petite lib QtGui4.dll).

    D'ailleurs, seule la 1ere raison que tu donnes (bugs de version) pourrait justifier le fait de distribuer les .dll avec le .exe, et je trouve que cette raison est une mauvaise raison : La version 4.5.2 de Qt est aussi différente de la version 4.5.1 quelque soit l'OS. Mais on fait la mise à jour sans se poser de question (ou presque) sous linux, alors qu'on a peur des bugs de version sous windows...

    Et du coup, chacun ajoute sa .dll avec son .exe, on perd complètement l'intérêt du dynamique (outre les deux autres très bonnes raisons que tu fournis, braindeadbzh)
  • Le problème de la compilation en liaison statique, c'est qu'à la mise à jour de ton binaire, au lieu de ne télécharger que, au hasard, les 1.5MB qui constituent uniquement ton code, tu vas télécharger un exe de 5, 10, (plus) MB. Donc le d/l initial est peut-être plus rapide, mais lors des mises à jour, tu y perds direct le peu de gain initial.
    braindeadbzh said:
    je sais pas trop comment il identifie les versions différentes.
    Ce sont les manifests qui servent à ça maintenant (c'est relativement récent => apparu avec VC++2005 je crois).
    Blax said:
    et je ne compte plus les lib Qt et Mingw (outre les skype, autocad et autre google earth, chacun y va de sa petite lib QtGui4.dll).
    Outre, les versions différentes de Qt (une dll 4.1 ne pourra pas faire fonctionner un soft compilé avec la 4.5), il y a aussi les différents compilateurs utilisés. Une DLL compilée avec VC++, MinGW ou ICC ne permettra de faire tourner un soft que s'il a été compilé avec le même compilo (et la même version de compilo) que la DLL nécessaire. Sauf à rechercher les adresses de chaque méthode au runtime, mais c'est une méthode peu utilisée.
    Donc non, il n'y a pas que la version de la lib utilisée qui entre en ligne de compte.
  • braindeadbzh said:
    Il prend en priorité la DLL qui se situe à côté de l'exe (sinon aucun intérêt, et c'est pareil sur les autres plateformes). Après effectivement si la DLL est déjà chargée il va utiliser celle en mémoire, par contre la je sais pas trop comment il identifie les versions différentes.
    C'est plus compliqué : http://msdn.microsoft.com/en-us/library/ms682586(VS.85).aspx
  • Bonjour
    slame said:
    je n'ai jamais compiler en statique peut tu m'expliquer comment faire avec Qt Creator ?
    Moi aussi j'aimerais savoir comment on fait ? Je préfèrerais ne pas avoir a fournir mes dll
    Merci
  • Quel est l'intérêt pour toi de ne pas à avoir à fournir les dll?
  • Aucun réel intérêt en fait, si ce n'est une certaine forme d'ergonomie (pouvoir livrer une mini application sous forme d'exe et rien d'autre).

    En fait je viens de commencer Qt4 aujourd'hui, les tuto et exemples avaient l'aire très sympa, mais installer Qt était une autre histoire.
    J'ai abandonné l'idée de faire fonctionner Qt avec visual C++ 2008 express, et j'ai passé la journée à pouvoir utiliser la commande "make" après les deux précédente "qmake -project" et "qmake".
    "make" ne marchait pas il à finalement fallut que je modifie le Path dans les variables d'environnement pour intégrer le "bin" de Qt, tout ça afin de pouvoir utiliser "qmake" dans l'invité de commande de visual !!!

    Tout ça pour dire que ce matin j'étais vraiment contant de commencer Qt, mais qu'il est tellement difficile à mettre en place que finalement cela me rend dingue ! Et finalement j'ai fini par réussir a compiler en ligne de commande, mais surprise au moment d'exporter l'apli... il manque des dll !!

    Au finale, j'ai passé tellement de temps à trouver les dll qui me fallait que je ne veux pas avoir a recommencer, alors s'il peux inclure tout seul les dll à utilisé j'éviterais peut etre de me trancher les veines ce soir !!!

    merci en tout cas
  • bonsoir,
    j'ai une question pour toi Calliope0 : as-tu une vrai raison de compiler ton programme avec VC++ ? Pourquoi n'utilises-tu pas l'environnement de Qt dédié au développement ? (Qt Creator)
    La programmation avec Qt s'est amélioré avec sa nouvelle version : il n'y a plus besoin de console (sous windows du moins) et l'environnement t'aide énormément (aide a coté du code, Ctrl+Espace te donne les fonction disponibles,...)

    Aprés pour partager une appli, c'est pas trés compliqué : vous devez la compiler en tant que 'release' et y déposer a coté les dll : QtGui.dll / QtCore4.dll / mingwm10.dll disponible dans le dossier {Installation (exemple : C:\Qt\2009.2}\qt\bin\

    Enfin, j'avoue que moi aussi, ça m'intéresserais de savoir comment compiler une appli Qt en static (juste pour savoir ^^)

    Bonne journée
  • Bonsoir,
    Est-ce que cela veut dire que la moindre petite application Gui va avoir au final une taille d'au moins 10Mo? (à cause du fichier QtGui4.dll)
Connectez-vous ou Inscrivez-vous pour répondre.