2009-06-26 6 views
1

J'ai un économiseur d'écran de Windows que je veux recompiler en utilisant les bibliothèques QT, de sorte que je puisse rendre disponible pour plus de plates-formes. Je suis confronté à des problèmes avec le déploiement sur Vista et XP.Comment construire QTcore4.dll sans dépendance à MSVCx80.dll?

Je compile mon économiseur d'écran statiquement avec MT, et exécute le vérificateur de dépendance. Les résultats sont:

MyScreensaver.SCR a besoin de plusieurs DLL, QTCORE4.DLL mais pas de MSVCx80.DLL. Jusqu'ici tout va bien.

Mon problème est que QTCORE4.DLL à son tour, a besoin de MSVCP80.DLL et MSVCR80.DLL En conséquence mon application ne fonctionne pas sur les systèmes Vista. Puis-je construire QTCORE4.DLL pour lier statiquement les bibliothèques microsoft (peut-être Libcmt.lib?) Afin que je n'ai pas de dépendances dans les DLL CRT MS?

Limitations:

  • Je ne veux pas avoir les utilisateurs installent les redistribuables MS VC. L'économiseur d'écran est seulement 1 Mo, et il est ridicule de demander à l'utilisateur de faire autant de changements dans son ordinateur juste pour un économiseur d'écran. Je ne veux pas utiliser l'astuce pour mettre les dlls MS CRT dans le même chemin d'application avec l'économiseur d'écran parce que les économiseurs d'écran sont installés dans system32, et je veux installer les fichiers possibles minimum là.

  • Enfin, je préfère produire un programme monolithique, plutôt qu'un tas de DLL

  • j'ai essayé une compilation statique complète et un lien de QT, mais ce n'est pas autorisé (si je comprends bien, par LGPL) et il est également recommandé d'après ceci: http://www.qtsoftware.com/developer/faqs/why-does-a-statically-built-qt-use-the-dynamic-visual-studio-runtime-libraries-do-i-need-to-deploy-those-with-my-application

Après avoir essayé des solutions dans différentes directions, il semble le plus réaliste consiste à utiliser le QTCore4.dll et QTGui4.dll, mais les ayant lié statiquement à MSVCRT. De cette façon, ni mon programme, ni les DLL QT auront des dépendances sur les DLL MSVCRT.

Y at-il une solution à cela? (Je suis nouveau à la programmation QT)

Merci, Michael

+0

Mise à jour: J'ai construit QT statiquement, j'ai inclus dans l'éditeur de liens et la QTcore.lib construire mon applitation aussi statiquement avec/MT. Je vois maintenant que l'économiseur d'écran dépend de MSVCR80.DLL, probablement parce que la construction statique de QT (QTcore.lib) en dépend aussi. MSVCR80.DLL est une barrière pour moi parce que comme je l'ai dit ci-dessus je ne peux pas déployer sur XP, et Vista. Donc, la question est maintenant: Y at-il un moyen de construire une application QT sans dépendance sur MSVCR80.DLL? Merci pour toute aide Michael – Mike

Répondre

1

Je pense qu'ils sont concertés que les parties de votre application seront compilées avec/MD (d) et des parties avec/MT (d), mais si vous contrôlez tout (y compris les bibliothèques tierces), alors il est assez sûr d'utiliser/MT (d).

+0

merci Shay, je vais réessayer de faire un lien statique. La fois précédente, j'ai tenté une liaison statique, l'application provoquait une erreur lors de la sortie. L'erreur était après la fin de mon code, et j'ai pensé que c'était un problème à cause de la liaison statique. Par conséquent, je vais attendre un peu, pour voir s'il y a une réponse en liant statiquement les DLL QT avec les bibliothèques MS CRT. S'il y a un moyen de faire cela, je préférerais aller dans ce sens. – Mike

1

Vous avez deux options:

  • Ces dépendances font partie de Microsoft Visual C++ Runtime Library, vous pouvez déployer cette bibliothèque dans votre InstallShield et l'utilisateur installe silencieusement, bibliothèque MSVCRT pas inclus dans Windows par défaut, vous doit déployer la bibliothèque d'exécution dans votre installshield et copier les DLL Qt*.dll dans le répertoire de votre application.

  • Utilisez Static Linking de Runtime et Qt dépendances principales, avec cette option vous avez un fichier exécutable, mais à la compilation statique de Qt, vous devez avoir une licence commerciale Qt pour une utilisation commerciale.