2009-05-28 8 views
2

J'ai régulièrement cette question sous Visual 2005 ou 2008:Link (? Au hasard) échoue avec DLL de débogage de Visual

Quand je compile un tas de DLL (C natif, C++, géré), parfois, peu d'entre eux don Ne pas lier correctement avec certaines DLL de débogage Microsoft. La sortie ne mentionne rien (pas d'avertissement, pas d'erreur). Je ne peux pas être au courant jusqu'à ce que je lance mon programme et obtienne une "exception non trouvée du module" sans plus d'explications.

Quand j'ouvre mes Dlls avec Dependency Walker, certains manquent msvcr90d.dll et MSVCP90D.DLL. Si je suis dans un moment chanceux, je dois juste reconstruire la DLL corrompue pour en obtenir une valide. Dans le pire des cas, la reconstruction produit une autre DLL corrompue, jusqu'à un moment mystérieux (heures ou jours plus tard) quand un dll valide ... semble fou, n'est-ce pas?

Le dll valide ont ce genre de chemin:

c: \ windows \ winsxs \ x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f \ MSVCP90D.DLL

Cela me rend fou !... Des idées ? Merci.

+0

Tout éditeur de liens de hasard est de mémoire virtuelle/physique? Si cela se produit, les résultats sont absolument insensés et incohérents. – EFraim

Répondre

1

Construire avec/MT au lieu de/MD.

+0

Pourriez-vous expliquer pourquoi cela réglerait le problème? –

+0

Voir ici: http://msdn.microsoft.com/en-us/library/abx4dbyh.aspx – Naaff

+0

en effet, il résout le problème! Merci. Mais je n'aime pas rester coincé sur quelque chose que je ne comprends pas ... MDD fonctionne bien la plupart du temps. Pourquoi parfois non? @Steve Rowe: il corrige le problème car vous ne liez plus avec debug dll. Il utilise la librairie statique. – rockeye

1

Peut-être qu'il devient confus de qui DLL à utiliser. Faire une recherche sous C: \ Program files \ Visual Studio ??? pour MSVCR90D.DLL et il devrait être sous comme C: \ Program Files \ Visual Studio ??? \ sdk ... \ bin Je ne suis pas sûr de la version que vous avez. Ensuite, dans votre PATH environnement, définissez ce chemin là-haut pour regarder dans ce chemin bin.

J'ai vu beaucoup de fois où il y a beaucoup de DLLs du même nom et le programme se confond avec celui avec lequel il devrait être lié. Essayez cela et voir si cela aide

Janet