{"id":44,"date":"2007-03-20T22:11:08","date_gmt":"2007-03-20T21:11:08","guid":{"rendered":"http:\/\/blog.m-ri.de\/index.php\/2007\/03\/20\/manifest-hoelle-msvcr80dll-nicht-gefunden\/"},"modified":"2007-03-22T10:32:40","modified_gmt":"2007-03-22T09:32:40","slug":"manifest-hoelle-msvcr80dll-nicht-gefunden","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2007\/03\/20\/manifest-hoelle-msvcr80dll-nicht-gefunden\/","title":{"rendered":"Manifest-H\u00f6lle &#8222;&#8230;MSVCR80.dll nicht gefunden&#8230;&#8220;"},"content":{"rendered":"<p>Mir ist wieder einmal ein Projekt untergekommen, das in der Debug Version nicht starten wollte. Ursache diese Fehlermeldung:<br \/>\n<em>&#8222;Die Anwendung konnte nicht gestartet werden, weil MSVCR80.dll nicht gefunden wurde. Neuinstallation der Anwendung k\u00f6nnte das Problem beheben.&#8220;<\/em><\/p>\n<p>Der Grund f\u00fcr diesen Fehler war in diesem Fall ein Manifest, dass selbst geschrieben wurde und nicht durch den Manifest Compiler erzeugt wurde.<\/p>\n<p>Der Reihe nach:<\/p>\n<ul>\n<li>Es wurde ein Projekt gebaut, das eine externe Library benutzte<\/li>\n<li>Diese externe Library wurde mit dem selben Compiler erzeugt. Sowohl als Debug, als auch als auch Release Version. (ZLib)<\/li>\n<li>Alle Projekte verwenden dynamische Bindung an die CRT.<\/li>\n<li>Der Entwickler machte nun aber einen kleinen Fehler. Im Debug Build instruierte er den Linker so, dass die Release Version der Library verwendet wurde. BTW: Ein Grund mehr immer #pragma comment(lib,&#8230;) zu verwenden, dann kann man in den Projekteinstellungen keinen Mist machen.<\/li>\n<li>Wie ich schon erw\u00e4hnte wurde nun das Manifest mit der Hand erzeugt um die entsprechenden Abh\u00e4nigkeiten und auch das Trustinfo Manifest korrekt zusammenzubauen, bzw. weil nicht mit MT.EXE aus dem Vista SDK verwendet wurde (siehe mein Blog).<br \/>\nDie Release CRT wurde nat\u00fcrlich nicht mit angegeben (obwohl verwendet), aber dessen war sich nat\u00fcrlich keiner im Team bewusst.<\/li>\n<\/ul>\n<p>Nun kam es zu dem Effekt, dass dieses Projekt im Debug Modus nicht starten wollte, weil die MSVCR80.DLL nicht gefunden wird. Ja und das stimmt, denn diese DLL kann nicht gefunden werden, da Sie nicht in den entsprechenden Manifesten definiert wurde.<\/p>\n<p>Wie findet man so einen Fehler?<br \/>\nHerausbekommen habe ich das durch die Verwendung von <em>DEPENDS.EXE<\/em>. Damit konnte ich erstmal ermitteln wer, wen, wann laden m\u00f6chte und wo das Laden letzten Endes fehlschl\u00e4gt.<em>\u00a0<br \/>\n<\/em>Dann habe ich die entsprechenden Module (DLLs und EXE Dateien) in den Resource-Editor geladen. Dort habe ich die entsprechenden Manifeste kontrolliert.<\/p>\n<p><strong>Nachtrag 22.03.2007 (als Kommentar wird es evtl. \u00fcbersehen)<\/strong><br \/>\nIch habe aktuell auch in einem <a href=\"http:\/\/groups.google.de\/group\/microsoft.public.de.vc\/browse_frm\/thread\/94056b049d51ac16\/231947c9514540d2\">anderen Fall<\/a> \u00e4hnliches herausbekommen. Hier wurde auch eine alte ZLib-Release Version (und andere) in ein Debug Projekt eingebaut. Nur waren diese Libraries im Projekt nicht mit VS-2005 kompiliert worden, denn sonst w\u00e4ren entsprechende Manifest Eintr\u00e4ge eingeflossen. Soweit ich das Projekt sehen konnte wurde _CRT_NOFORCE_MANIFEST auch nicht verwendet, was die Erzeugung der Manifest Eintr\u00e4ge verhindert h\u00e4tte.<br \/>\nDas Resultat auch hier. Eine MSVCRT80.DLL wird vom Linker verlangt, aber es existiert kein Manifest dazu. Die entsprechende gleiche Fehlermeldung auch hier.<br \/>\nEin Rebuild der entsprechenden Libraries und des Projektes lies das Programm dann zwar starten, aber dennoch wurden in diesem Falle gleichzeitig Debug-CRT und Release-CRT verwendet, was sicher nicht im Sinne der Programmierer war.<\/p>\n<p>Wir lernen daraus wieder einmal: Achte streng auf die Trennung von Release und Debug Libraries. \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mir ist wieder einmal ein Projekt untergekommen, das in der Debug Version nicht starten wollte. Ursache diese Fehlermeldung: &#8222;Die Anwendung konnte nicht gestartet werden, weil MSVCR80.dll nicht gefunden wurde. Neuinstallation der Anwendung k\u00f6nnte das Problem beheben.&#8220; Der Grund f\u00fcr diesen Fehler war in diesem Fall ein Manifest, dass selbst geschrieben wurde und nicht durch den &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2007\/03\/20\/manifest-hoelle-msvcr80dll-nicht-gefunden\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eManifest-H\u00f6lle &#8222;&#8230;MSVCR80.dll nicht gefunden&#8230;&#8220;\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[19,3],"tags":[69,36],"class_list":["post-44","post","type-post","status-publish","format-standard","hentry","category-crt","category-programmieren","tag-manifest","tag-vs-2005"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/44","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/comments?post=44"}],"version-history":[{"count":0,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/44\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=44"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=44"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=44"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}