En fait je cherche comment obtenir un exécutable à partir duquel je ne suis pas obligée d'installer la bibliothèque Qt dans un pc pour que mon application marche?
En fait je cherche comment obtenir un exécutable à partir duquel je ne suis pas obligée d'installer la bibliothèque Qt dans un pc pour que mon application marche?
Pour faire ça, il faut que ton application trouve quand même les lib de Qt quelque part. Si tu ne souhaites pas installer Qt dans la machine cible, alors tu dois récupérer les lib correspondante de Qt (QtCore par exemple...). Soit par copie, ou tu fais un installeur qui les copiera pour toi.
D'où le fait qu'on ne voit jamais ce mécanisme lorsqu'on installe un logiciel. Certains petits logiciel, ou anciens embarquent dans le même répertoire des lib.
En suivant le document du lien suivant :http://qt-quarterly.developpez.com/q...oying-windows/ ,
je n'ai pas su comment faire avec la ligne de commande suivante :
cd %QTDIR%
configure -static <autres options dont vous avez besoin>
Il faut que tu te rende dans le dossier où se trouve Qt
C:\Qt\4.5.2\ par exemple (chemin différent si tu as installé le SDK).
Et que tu fasse un configure.exe -static pour compiler les lib de Qt en statique.
Mais ce n'est pas la seule solution pour exporter ton application. Compiler en static permet de tout intégrer dans l'éxécutable, plus de dépendances de librairies. Mais tu perds l'avantage des librairies partagées.Il faut que tu te rende dans le dossier où se trouve Qt
C:\Qt\4.5.2\ par exemple (chemin différent si tu as installé le SDK).
Et que tu fasse un configure.exe -static pour compiler les lib de Qt en statique.
G.
An fait mon application est bâtit sur une architecture à plugins de ce fait j'ai un dossier nommé "plugins qui contient les différents dlls que mon application utilise.
Comment dois je procéder pour déployer son exécutable?
Reste -t-il valable la commande "configure -static" dans ce cas?
Si tu utilises d'autres librairies, pour moi lier statiquement Qt ne sert plus à rien. Pour déployer ton application, sans la recompiler, il te suffit de copier l'éxécutable et toutes les librairies (dlls) nécessaire au fonctionnement de ton application. Le plus dur dans tout cela, est bien d'identifier *toutes* les librairies.
-il y'a d'abord celles de Qt (QtGui et QtCore au moins, + d'autres si ton application utilise d'autres modules, ou des images non incluses à la compilation (et donc tu auras besoin des dlls d'images de Qt pour les utiliser).
-il y'a ensuite toutes les dlls "annexes" de ton application. Seules toi connait celles que tu utilises dans ton application. Attention, ces librairies sont peut etre elles meme dépendants d'autres librairies, qu'il faudra donc inclue également.
-il y a ensuite des dlls associés à ton compilateur, elles sont souvent dans le dossier d'install de ton compilateur, dans un dossier avec un nom du genre "redist". Si tu nous indiques ton compilateur, on pourra sans doute t'aider pour celles ci.
-il ne reste plus qu'à spécifier à ton application ou seront situées ces dlls lorsqu'elles se lancera. Le plus simple, selon moi, est d'ajouter cette ligne dans ton code :puis de mettre toutes les dlls dans le même répertoire que ton executable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part QDir::setCurrent(QCoreApplication::applicationDirPath());
Mon explication est un peu brouillon, j'espere que tu arriveras à en faire quelquechose. Bien sur, ton application ne marchera correctement que sur les machines similaires à la tienne (le C++ est un langage compilé).
G.
Tu peux utiliser le logiciel Depends sur ton application.
Il te dira toutes les dll dont il a besoin pour fonctionner.
Tout dépend de ce que font tes plugins. S'ils utilisent Qt, alors c'est quasi indispensable d'utiliser Qt sous forme de dlls car tes plugins vont échanger des objets Qt avec ton exe. Sinon, c'est pas nécessaire. Mais note que Qt te facilite la réalisation de plugin, je sais pas si tu utilises cela, mais ça serait une bonne idée (donc pas de compilation statique). Fais aussi une recherche sur la fonctionnalité "build key" de Qt.
Si on developpe sous Windows avec VC++, ce n'est pas suffisant. Les dlls de VC++ doivent être enregistrées de manière spéciale sous Windows. Il faut fournir un installeur qui fait ça... ou alors compiler de manière à utiliser les libs VC++ de manière statique. Ce n'est pas possible en "standard" avec Qt, mais CuteBuilder permet de simplifier cela.
C'est un peu bidouille
QCoreApplication::addLibraryPath() est faite pour ça.
Voir aussi la doc de QLibrary et QPluginLoader.
Je ne sais pas avec quelle version de VC tu travailles, mais pour ma part, avec l'express09 sous XP, ça a marché plusieurs fois en copiant les 3 dlls qui vont bien. Après si tu utilises .Net c'est différent.Envoyé par Gulish
Si tu utilises d'autres librairies, pour moi lier statiquement Qt ne sert plus à rien. Pour déployer ton application, sans la recompiler, il te suffit de copier l'éxécutable et toutes les librairies (dlls) nécessaire au fonctionnement de ton application. Le plus dur dans tout cela, est bien d'identifier *toutes* les librairies.
Si on developpe sous Windows avec VC++, ce n'est pas suffisant. Les dlls de VC++ doivent être enregistrées de manière spéciale sous Windows. Il faut fournir un installeur qui fait ça... ou alors compiler de manière à utiliser les libs VC++ de manière statique. Ce n'est pas possible en "standard" avec Qt, mais CuteBuilder permet de simplifier cela.
G.
Je fait aussi pareil.
En faite y as deux choix :
1- tu fait installer le redist de ta version de visual
2- tu copie les dll (et le manifest il me semble) qu'il te faut
Un peu de doc :
http://qt.developpez.com/doc/4.6-sna...cation-package
Partager