2011-11-04 3 views

Répondre

0

Ceci est (surtout sous Windows) un problème courant. Lors de l'installation du Qt SDK, vous obtiendrez au moins 2 .dll avec le même nom, mais dans des versions différentes. Il arrive que vous liez avec la lib (dev-) lib voulue mais à l'exécution la version de Designer/Creator est utilisée. La façon la plus simple d'éviter cela est de déployer la bonne version de la DLL avec vos binaires (.exe et autres) dans un dossier séparé. Cela peut être obtenu en modifiant votre script de construction. Cela dépend de votre système de construction qui est généralement qmake/.pro ou cmake/CMakeLists.txt.

Quant à CMake, étant donné une variable d'environnement MYQTDLLDIR contenant le chemin vers les fichiers à déployer, vous pouvez utiliser quelque chose comme ça:

configure_file($ENV{MYQTDLLDIR}/QtCore4.dll ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) 
configure_file($ENV{MYQTDLLDIR}/QtGui4.dll ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) 

documentation dépouillée de cmake --help-full:

CONFIGURE_FILE Copier un déposer à un autre emplacement et modifier son contenu .

CONFIGURE_FILE ( [COPYONLY] [ESCAPE_QUOTES] [@ONLY])

Copie un fichier à l'autre et substituts variables valeurs référencées dans le contenu du fichier. Si est un chemin relatif , il est évalué par rapport au répertoire source actuel. Le doit être un fichier, pas un répertoire. Si est un chemin relatif , il est évalué par rapport au répertoire binaire actuel. Si les noms d'un répertoire existant le fichier d'entrée est placé dans ce répertoire avec son nom d'origine.

Cette commande remplace toutes les variables du fichier d'entrée référencées $ {VAR} ou @ VAR @ par leurs valeurs déterminées par CMake. Si une variable
n'est pas définie, elle sera remplacée par rien. Si
COPYONLY est spécifié, aucune extension de variable n'aura lieu.Si ESCAPE_QUOTES est spécifié, tous les guillemets substitués seront de style C échappés. Le fichier sera configuré avec les valeurs actuelles des variables CMake . Si @LYLY est spécifié, seules les variables de la forme @ VAR @
seront remplacées et $ {VAR} sera ignoré. Ceci est utile pour
en configurant des scripts utilisant $ {VAR}. Toutes les occurrences de #cmakedefine VAR seront remplacées par #define VAR ou/* #undef VAR */
selon le réglage de VAR dans CMake. Toutes les occurrences de
# cmakedefine01 VAR seront remplacés par #define soit VAR 1 ou #define VAR 0> selon que VAR est évaluée à VRAI ou FAUX dans CMake

Quant à qmake, vous pouvez utiliser INSTALLS (utilisé lorsque make install est appelé) ou exécuter une "commande simple" après la liaison. En utilisant INSTALLS:

mytarget.path = /output/path 
mytarget.files += /path/to/QtCore4.dll 
mytarget.files += /path/to/QtGui4.dll 
INSTALLS += mytarget 

qmake en utilisant l'exécution de la commande:

win32 { 
    EXTRA_BINFILES += \ 
     $${MYQTDLLDIR}/QtCore4.dll \ 
     $${MYQTDLLDIR}/QtGui4.dll 
    EXTRA_BINFILES_WIN = $${EXTRA_BINFILES} 
    EXTRA_BINFILES_WIN ~= s,/,\\,g 
     DESTDIR_WIN = $${DESTDIR} 
    DESTDIR_WIN ~= s,/,\\,g 
    for(FILE,EXTRA_BINFILES_WIN){ 
       QMAKE_POST_LINK +=$$quote(cmd /c copy /y $${FILE} $${DESTDIR_WIN}$$escape_expand(\n\t)) 
    } 
} 
+0

cela vous dérangerait-il et élaborez-vous sur ce script de construction mentionné par vous. Cela semble très intéressant. – smallB

+0

@smallB a mis à jour ma réponse – mbx

4

Cela ressemble à moi que vous construisez contre une version de Qt et la liaison contre une autre à l'exécution. Exécutez l'outil de maintenance QtSDK et supprimez toutes les versions de Qt Desktop dont vous n'avez pas besoin. Vous devrez ensuite repointement Codeblocks aux bons en-têtes.

Je suppose que si vous exécutez depuis Codeblocks, vous avez dû spécifier explicitement les DLL à utiliser lorsque vous exécutez votre application nouvellement construite. Si oui, assurez-vous que ce sont les versions correctes (ie les remplacer par des dlls de QT INSTALL DIR \ Desktop \ 4.7.x \ mingw \ bin [bien que je ne sois pas sur mon PC de travail en ce moment, donc ce chemin peut être légèrement faux. Assurez-vous juste que vous êtes dans le bon dossier 4.7.x]).

Pour être honnête, si vous utilisez Windows, pourquoi ne pas utiliser QtCreator? Mis à part un léger manque d'intégration de la GDB, c'est plutôt bien et vous constaterez que des problèmes de ce genre sont plus difficiles à trouver.

+0

merci, je l'utilise QtCreator pour la conception et le code IUG qt spécifique, et la logique métier dans cb. Pourquoi? Peu de raisons, l'une d'entre elles est que j'aime vraiment CB et je ne voudrais pas arrêter de l'utiliser. – smallB

Questions connexes