J'ai fait quelques jeux avec Visual C ++ 2015 et OpenGL. Lorsque je l'ai exécuté sur ma machine, il n'y a eu aucun problème, mais lorsque je l'ai exécuté sur d'autres machines, cela montre que certaines DLL sont manquantes. Je veux savoir comment m'assurer que cela ne se produira pas la prochaine fois et que dois-je prendre en compte pour éviter les problèmes de fichiers manquants?
c++
visual-studio
Ankit singh kushwah
la source
la source
Réponses:
Vous devez installer les redistribuables pour la version de Visual Studio que vous avez utilisée sur toute machine qui souhaite exécuter les exécutables, par exemple https://www.microsoft.com/en-us/download/details.aspx?id=48145 pour VS2015 . Vous pouvez également avoir besoin de redistributions pour DirectX ou d'autres composants.
Les installateurs d'applications installent généralement tous les redistribuables pour n'importe laquelle de leurs dépendances. Vous pouvez créer un tel programme d'installation avec InnoSetup, NSIS, WIX ou divers autres outils.
Il est possible de créer des exécutables qui n'ont pas besoin de redistributions, mais vous êtes alors limité à un sous-ensemble des fonctionnalités de base de Windows, ce qui n'est généralement pas suffisant pour créer un jeu significatif ou une grande application. Les programmes d'installation eux-mêmes sont un exemple d'applications qui ne nécessitent aucune dépendance pour s'exécuter.
la source
MSVCRT.DLL
(inclus avec Windows lui-même) au lieu deMSVCPxxx.DLL
(versions spécifiques à la version incluses dans les versions de Visual Studio).J'utilise Dependency Walker pour retrouver les DLL manquantes:
Il existe également une option de compilation dans VS pour lier statiquement les DLL:
la source
Pour Visual C ++, vous avez plusieurs choix sur la façon de gérer la redistribution: exécutez un EXE à partir de votre programme d'installation (avec les droits d'administrateur), utilisez un module de fusion MSM avec votre programme d'installation MSI, ou même des DLL côte à côte. Voir MSDN pour les détails.
Le plus gros problème est OpenGL. La seule version d'OpenGL incluse avec Windows est un moteur de rendu OpenGL 1.5. Tout autre élément nécessite l'installation d'un ICD tiers.
la source
Avertissement: Ceci est une solution de contournement , pas une solution à votre réponse, mais toujours, une possibilité très viable.
Si vous voulez être absolument sûr qu'il n'y a pas de dépendances de VS lui-même - mais il a ses propres inconvénients - dans les paramètres de génération de code, vous pouvez choisir d'aller avec Multi Threaded (MT) / Multi Threaded Debug (MD) (pour les versions de débogage ) au lieu de MT DLL (MTd) / MT Debug DLL (MDd).
Quels sont les inconvénients?
Et quels sont les avantages?
Consultez ce lien pour une explication plus élaborée et pour les pièges et les chutes que vous pourriez rencontrer avec l'utilisation d'un runtime statique.
Une autre solution consiste à placer toutes les DLL requises à l'emplacement de votre fichier binaire. Votre application ne bénéficiera pas de mises à jour (des bibliothèques d'exécution) mais c'est tout.
La vraie solution consiste à distribuer l'application en mode dll de libération / non débogage (MTd) et à fournir le programme d'installation redistribuable VC ++ correct (et tout autre programme d'installation de bibliothèque que vous pourriez utiliser, par exemple OpenAL, DirectX9, PhysX) et à laisser l'utilisateur exécuter avant d'exécuter votre application (comme d'autres réponses l'ont souligné).
Assurez-vous également de faire savoir à l'utilisateur qu'il doit éventuellement mettre à jour ses pilotes GPU (car ceux-ci contiennent également plusieurs temps d'exécution pour de nombreuses applications, par exemple OpenGL, Vulcan).
la source
Ma solution était de copier et coller la DLL qui a provoqué l'erreur dans le dossier où se trouve le fichier .sln dans Visual Studio. Après la
#include
section, je l'ai écrite#pragma comment (lib, "lost DLL name with .dll")
et résolue!Remarque: j'ai résolu le problème que j'ai rencontré avec une DLL de bibliothèque tierce (vulkan api). Peut-être que ce n'est pas connu mais 90% fonctionneront bonne chance :)
la source