10
votes

Le mode de sortie dépend toujours de msvcp110d.dll (C ++ MSVS)

Je suis nouveau à la programmation C ++ et venais de finir de faire une calculatrice simple. J'ai décidé de le partager avec mes amis et après plusieurs tentatives de la compilation de la compilation en mode de libération. Cependant, même en mode libération, il dépend toujours du MSVCP110D.dll. Je me demandais s'il y avait un moyen de résoudre ce problème?


3 commentaires

Les seules ressources extérieures que je tire sont #include "stdafx.h" #include #include #include mais j'avais l'impression que, en mode de libération, cela supprimerait tout besoin de ressources extérieures et serait complètement couru à l'intérieur de lui-même.


Vous ne vous aidez pas vous-même, ni nous, en n'expliquant pas comment vous savez que vous avez une dépendance sur msvcp100d.dll. Vous DO Donne une dépendance dans la version de version sur msvcp110.dll, elle contient le code de iostream. Vous devez le copier avec votre .exe, msvcr110.dll aussi. Ou vient de construire avec / mt en vigueur, bien pour des programmes simples qui n'utilisent pas de DLL.


Avez-vous essayé d'utiliser Dépendency Walker?


3 Réponses :


7
votes

1) msvcp110d.dll est l'exécution .dll pour la version "Débogage" de la bibliothèque d'exécution MS C. Il semble donc que votre .exe n'aurait peut-être pas été construit pour "libérer" correctement après tout.

2) Voici des informations pour le "Visual Studio Runtime Redistributable":

http://www.microsoft.com/en- US / Download / Détails.aspx? Id = 30679

3) Voici plus d'informations sur ce problème particulier:

http: // social.msdn.microsoft.com/forums/en-us/vsexpressvc/thread/e128dff6-cef5-4a81-b6de-fcbcaa7a23bb

Malheureusement, le MSVCP100D.DLL est une DLL de débogage et ce n'est pas inclus Dans le package redistrautable Microsoft Visual C ++. C'est parce que Normalement, la version de débogage n'est pas une sortie à autre que le développeur. Le développeur l'a installé par défaut avec Visual Studio.

Vous pouvez compiler votre projet dans "Release" afin que tout dll dont vous aurez besoin sera inclus dans le package redistrautable Microsoft Visual C ++.

sinon vous pouvez faire le lien statique de toutes les bibliothèques (spécifier / mt dans Libération et / MTD dans la configuration de débogage dans les options du compilateur): mais personnellement, je ne le recommande pas de savoir que vous avez mis dans l'exécutable beaucoup informations (utilisées par le débogueur) qui ralentira votre application.


1 commentaires

résolu pour moi. Est tombé sur un problème similaire récemment. La chose la plus étrange que ma DLL résultante dépendait de MSVCR100.dll (sans «D»), ce qui avait raison parce que j'ai changé / MDD sur / MD, mais également dépendant de MSVCP100D.dll, qui ne semblait pas juste pour la même raison. Après une longue enquête, j'ai constaté que cela dépend des définitions de préprocesseur. Changer _debug au débogage a résolu le problème pour moi.



4
votes

Je suppose que votre problème est avec une dépendance à la version de débogage de la DLL et non de la dépendance à la DLL elle-même.

Il est fort probable que vous faites une de ces 2 choses

  1. compilation avec / ddebug ou / d_debug ou

  2. liaison avec msvcpd.lib

    Lorsque vous compilez avec / ddebug ou / d_debug et #include Ing l'un des en-têtes standard C ++, puis msvcpd.lib est tiré dans (avec un #pragma (lib) qui conduit à une dépendance sur MSVCPD ***. DLL.

    MSVCP (D) *. DLL est la version DLL de la bibliothèque C ++ standard.

    Si, à la place, votre problème est avec une dépendance à n'importe quelle version de la DLL i.e. Vous souhaitez créer un lien staticly avec la bibliothèque C ++, vous pouvez compiler votre programme avec _static_cpplib . .


4 commentaires

Je suis désolé, je suis incroyablement nouveau à cela. Mais comment allais-je utiliser statiquement la liaison de la DLL? Lorsque je l'ai compilé, j'ai changé le type de compilation de débogage à la libération. Il a ensuite créé un dossier de publication avec mon .exe et .CPP contenus dans.


@ user2396111 Cliquez avec le bouton droit de la souris sur Solution -> Propriétés, C / C ++, Préprocesseur-> Ajouter _static_cpplib aux différentes définitions de préprocesseur existantes. De plus, lorsque vous êtes là, vérifiez si le débogage ou _debug est déjà défini.


Ce n'est pas la case, une option obsolète de VS2012. C / C ++, génération de code, bibliothèque d'exécution = / mt


@Hanspassant, je souhaite juste que vous sachiez que vous avez sauvé 6 heures de ma vie



0
votes

Utilisez-vous des bibliothèques supplémentaires? Peut-être avez-vous inclus une version de débogage d'un fichier DLL avec votre exécutable.


0 commentaires