Comment puis-je déterminer les redistribuables C ++ que mon programme doit exécuter?
Est-il possible que j'ai besoin d'installer un vcredist pour vs2012 ET pour vs2010?
J'ai juste eu une erreur où mon application ne pouvait pas charger de .dll et il a soudainement commencé à travailler après j'ai fait une autre installation, ce qui m'a incité à deviner qu'il doit y avoir installé une ancienne vcredist qui fixe le problème.
Cependant, je suis sûr que je suis à l'aide de c++11 caractéristiques.
source d'informationauteur Blub | 2013-09-03
Vous devez vous connecter pour publier un commentaire.
De déploiement est un travail sur son propre. Et je déteste ça, je déteste la façon dont vous avez à écrire des installations sur Windows. ...De façon à se sentir mieux maintenant...
Vous avez seulement besoin d'un vcredist. L'un à l'éditeur de liens a décidé de lier votre programme. Si vous avez le "kit de développement logiciel Windows est" installé, vous trouverez le réel redist:
Si vous installez toutes les mises à jour, y compris les pas les plus importants, Microsoft mettra à jour votre redist dans ce dossier!
Peut-être que vous avez un fichier exécutable, qui ne veulent pas courir, vous avez besoin de la dependency walker. Un outil, donc utilement que Microsoft a dû retirer de Visual Studio. Télécharger le programme et ouvrez votre exe. Vous n'avez pas besoin de comprendre ce qui se passe réellement. Tant qu'aucune boîte de Dialogue apparaît lors de l'ouverture, tout est ok, même si il y a des points d'exclamation dans la fenêtre du bas. Si une boîte de Dialogue apparaît avec quelque chose comme "ne Peut pas résoudre" que de regarder dans la fenêtre du bas. Habituellement, il est maintenant dans la fenêtre du bas quelque chose comme
"msvcr.dll" ou "msvcr100.dll" ou "msvcr110.dll".
Si elle inclut un "d" avant l'extension comme "msvcr100d.dll" l'exécutable est compilé en mode debug et votre voyage se termine sur un système sans installé le compilateur. Si non, le nom vous dit qui vcredist vous avez besoin:
msvcr100 = VS 2010 redist (32 bits) (64bit)
msvcr110 = VS 2012 redist (32/64bit?)
parfois, il n'est pas msvcr mais il commence toujours par "ms". Bien sûr, le programme vous indiquera toutes les dll manquant, et pas seulement les directives de microsoft et qui commande dans la dll. C'est parfois très utile.
Vous devez le faire avec toutes les dll dans le dossier de ton exécutable, car ils peuvent aussi avoir unresolveable dépendances.
Retour à votre première question. Votre programme peut uniquement des liens vers des msvcr100 ou msvcr110, de ne pas les deux, c'est la raison pour laquelle vous seulement besoin d'une vcredist par l'exécutable.
Comme mentionné dans un commentaire, Un tiers de la DLL peut être coupable de l'aide d'un autre msvcp version. Alors, oui, vous avez à la recherche de toutes les DLL que vous utilisez et vous devez installer à la fois vcredist quelques fois.
PS: Il y a toujours au moins deux d'entre eux, msvcr et msvcp.
J'ai résolu ce problème comme suit (sur Windows 7):
Dependency walker n'aide pas pour moi (il ne m'ont troublé par des rapports inutiles dépendances).
Si votre OS est Vista ou version ultérieure (pas XP), servez-vous en SxStrace.exe pour générer un journal de DLL sont chargées et ce module nécessite. Il va vous montrer clairement si plusieurs CRT versions de DLL sont chargées, et pour ce que DLL (3e partie ou pas).
La VS2012 redistribuable est mis en, par exemple "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\redist".
-- David
Si vous voulez savoir ce que les temps d'exécution sont nécessaires, vous pouvez essayer d'utiliser le "Dépendances" outil de lucasg sur github ( https://github.com/lucasg/Dependencies ), qui travaille sur les systèmes modernes comme win10.
Vous aurez juste à regarder pour
MsVcR##.dll
oVcRuntime###.dll
(où # représente un chiffre) dans l'arbre des dépendances..HTH
PS: L'ancien et fidèle "dependency walker" nous avons été à l'aide pendant des années, ne semble pas en mesure de gérer de la façon la plus récente de l'OS poignée de retard de dépendances, les marquer comme "manquant", alors qu'ils ne sont pas absent, il suffit de retard chargé de façon qu'il ne connaît pas...