Impossible d'exécuter le programme si vous utilisez des bibliothèques boost (C ++) dans la version debug sous WinXP

StackOverflow https://stackoverflow.com/questions/439840

Question

J'utilise boost pour plusieurs projets C ++. J'ai récemment effectué une mise à niveau (1.33.1 à 1.36, bientôt à 1.37), depuis lors, je ne peux plus exécuter aucune construction de débogage.

Pour être sûr qu'il ne reste plus aucun problème de projet, j'ai créé un projet-test minimum, qui ne comprend que boost.thread, et l'utilise pour démarrer une méthode. La version validée peut être lancée, pas la version debug, bien que Dependency Walker indique que toutes les bibliothèques requises sont trouvées (cela signifie également que le CRT MS Debug requis se trouve dans le répertoire SxS).

Au démarrage, je ne reçois que:

  

Cliquez sur le bouton "Rich" pour initialiser le script (0xc0150002).   Klicken Sie auf "OK", cliquez ici pour lire la suite.

Ce qui ne signifie rien d'autre que "échec de l'initialisation de l'application". Une recherche sur Internet a principalement conduit à un problème lié à l'installation de MS Office , qui recommande de réparer WinXP.

Donc, à côté de la configuration de réparation (qui, selon moi, ne va pas aider car je parle de problèmes avec debug-dll), des idées?

Ah, avant d’oublier: le même code source ne génère aucune erreur sur la machine de compilation (c’est-à-dire que les DLL peuvent être enregistrées, ce qui signifie qu’elles sont exécutées). Donc, c’est évidemment un problème d’installation, mais comme les DLL sont , et que Dependency Walker le trouve, quoi d’autre que j’ai oublié?

( modifier ) Eh bien, je n'ai pas encore résolu mon problème, mais grâce à deemok, je suis un peu plus loin. Afin de réduire les malentendus, voici quelques éclaircissements:

  • Le programme ne peut pas s'exécuter sur la développeur -machine
  • Je travaille avec un installé VS2005 (il s’agit d’un projet VC ++ 8)
  • J'ai utilisé la configuration optimisée de BoostPro , ainsi que toutes les versions de compilation possibles. J'ai vérifié deux fois qu'ils sont là (sinon, j'aurais déjà des erreurs d'éditeur de liens lors de la compilation).
  • et j’ai vérifié deux fois l’un des coins de la configuration d’inclusion / lib / bin à laquelle je peux penser - étant donné que boost utilise la liaison automatique sur les fenêtres, avec une convention de dénomination spéciale, la construction ou le démarrage aurait échoué. message d'erreur beaucoup plus compréhensible.
  • Je ne peux pas utiliser la liaison statique , car boost.thread requiert une liaison dynamique pour les projets DLL (je pourrais peut-être déranger ici, mais ce problème semble ne se produire que sur ma machine, je ne veux pas gâcher cela, car je suis sûr que les gars de boost avaient une raison de placer cet enregistrement là-bas en premier lieu)
  • Comme je l'ai écrit, j'ai vérifié auprès de Dependency Walker et tout se passait bien.

Actuellement, il semble y avoir une erreur dans le fichier boost-dll (peut-être un manifeste incorrect), cela va vérifier.

Était-ce utile?

La solution

Vous utilisez donc les bibliothèques pré-construites de BoostPro? Si tel est le cas, votre environnement peut différer légèrement de celui dans lequel il a été intégré (pack de fonctionnalités TR1 ou non, etc.). Il vaut peut-être mieux essayer bâtiment Boossez-vous dans votre environnement spécifique.

Autres conseils

C'est un Côte à côte (SxS) numéro & # 8211; copier simplement les DLL ne suffit plus.

En ce qui concerne votre problème spécifique à la compilation Debug, voir: Exécution de vc2008 le débogage est construit sur des machines autres que des développeurs

Réponse courte:

  

Vous ne pouvez pas le faire, car aucun programme d’installation n’a été redistribué pour l’exécution du débogage (et en fait, la licence logicielle interdit sa distribution. Vous risqueriez donc de rompre le CLUF même si quelque chose avait été assemblé).

Vous devrez donc installer Visual Studio à cet emplacement.

Toutefois, si vous souhaitez toujours essayer sans emprunter ce chemin, vous pouvez lire La réponse de puetzk dans son intégralité.

Vous pouvez également essayer de tout relier de manière statique .

Cela pourrait n’avoir rien à voir avec SxS. Je suggère de rechercher dans le journal des événements les messages d'erreur SxS et d'utiliser Dependency Walker pour rechercher le problème de dépendance de DLL le plus probable, ou qu'une des DLL renvoie FALSE de son DllMain (pour une raison quelconque).

Activer également les instantanés du chargeur:

gflags -i yourapp.exe + sls

pourrait apporter une lumière supplémentaire lorsqu’il est exécuté sous le débogueur (ou le walker walker pour l’instant).

Remarque: gflags fait partie de Outils de débogage Windows .

Procurez-vous le Walker Dependance Walker . Ouvrez votre application exe dedans. Il vous montrera toutes les dll dont votre application a besoin mais ne peut pas charger / accéder.

Si cela ne suffit pas, vous pouvez également profiler votre application avec le gestionnaire de dépendances, ce qui vous donnera beaucoup de résultats pour savoir où se trouve le problème.

[modifier] puisque vous n’avez que des problèmes avec la construction du débogage: Assurez-vous que lors de la mise à niveau de boost, vous avez également reconstruit non seulement les fichiers binaires de publication, mais également les fichiers binaires de débogage de boost. Et bien sûr, assurez-vous que la version de débogage a été construite avec la même version de VisualStudio que celle que vous utilisez maintenant.

Assurez-vous également que les chemins d'inclusion (répertoires Tools- > options- > Projets & solutions- > VC ++) sont corrects: les chemins de la dernière version boostée doivent être présents, pas peut-être d'une version antérieure.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top