libs und mscvr80.dll nicht gefunden



  • Hallo zusammen!

    meinem projekt habe ich eine headerdatei und die dazugehörige .lib datei
    hinzugefügt.

    seitdem kann ich die anwendung zwar compiliern, aber im debug mode nicht mehr starten.-> "msvcr80.dll nicht gefunden."

    ich vermute mal, es liegt daran, dass die lib vom hersteller natürlich als release kompiliert wurde.

    auch im release-mode funktioniert das ganze.

    gibt es eine möglichkeit, dass ich das trotzdem laufen lassen kann?
    irgendwelche projekteinstellungen? (bin da nicht erfahren)

    achja, ich verwende Visual Studio 2005
    im vc6 lief das ganze übringens problemlos.



  • hallo Smeagol, kommt mir bekannt vor. Ich hatte das Problem auch: Release ging, Debug nicht.

    Ich habe nach langem Suchen das Projekt dann neu angelegt und die Quellen wieder rein kopiert.
    Welcher Schalter da nicht funktionierte, und wieso eine Release-DLL gebraucht wurde (die dann trotzdem nicht funktionierte), habe ich so natürlich nicht ermitteln können. An eingebundenen gekauften Libs lag es jedenfalls nicht (die sind ja wieder drin).

    Tester2


  • Mod

    Hast Du ein Manifest für Deine Applikation erzeugt? Ab VC8 ist bei der Verwendung der CRT als Shared DLL ein Manifest notwendig!



  • Ich jedenfalls hatte das Manifest erzeugt. Das Problem war, dass laut Dependency Walker die Debug-Anwendung selbst und nicht eine der DLLs zusätzlich zur Debug-DLL unbedingt die Runtime-DLL wollte.

    Tester2



  • wird das mainfest nicht automatisch erzeugt?



  • Smeagol, hast Du das Problem inzwischen gelöst?

    An eingebundenen gekauften Libs lag es jedenfalls nicht

    Da war ich zu voreilig, nachdem die letzte Header wieder eingebunden, war auch der Fehler wieder da. Ich kann ziemlich genau eingrenzen, wo die falsche DLL geladen wird. Nur ändern kann ich es nicht, da es sich um eine Fremdanwendung eines bekannten Unternehmen handelt, das die eigene Software nicht mehr pflegt.

    Tester2



  • nein, ich hab das Problem noch nicht gelöst. Das Zitat war nicht von mir.
    Bin nach wie vor, für Lösungsansätze dankbar.

    Ich weiss acuh nicht, wie ich von Hand ein Manifest erzeugen soll, Vorschlag von Martin Richter, bzw. was soll da drin stehen und wie binde ich das dann ein?



  • Das Zitat war nicht von mir.

    Aber von mir.

    Das Manifest wird doch automatisch im Projekt erzeugt. Da wird im konkreten Fall in der Debug-Version auf "Microsoft.VC80.DebugCRT" verwiesen. Das ist bereits registiriert und steht im Ordner Windows\WinSxS. Und da stehen für DEBUG definitiv die richtigen DLLs.
    In meinem Projekt (aber nur in diesem einen Projekt, das die fremden Header-Files und LIBs eingebunden hat) wird in der Debug-Version aber versucht die MSVCR80D.dll und die MSVCR80.dll zu laden. Was natürlich schief geht. Sobald ich die Includes auskommentiere, ist alles OK.

    Bin nach wie vor, für Lösungsansätze dankbar.

    Ich auch!

    Hat denn niemand eine Idee? In der VC 2003-Version war noch alles in Ordnung. Und ich bekomme von dem Fremdanbieter definitiv keine neuen Quellen und kann sie auch nicht neu übersetzen. Ich kann auch diese ganz spezielle Library mit SDK-Funktionen nicht durch eine andere ersetzen.



  • Das Problem ist (wie Du schon erkannt hast), dass die LIB gegen die Release-Version gelinkt wurde und Du aber eine Debug Anwendung erstellst.

    Ich persönlich würde den Hersteller der LIB bitten auch eine Debug-LIB zur verfügung stellen. Das spart Dir (und anderen) unnötige Probleme. Auch ist in der aktuellen Konstelation überhaupt nicht sichergestellt, dass Deine Debug-Anwendung überhaupt funktiniert, falls CRT-Speicher/Daten zwischen der LIB und Deiner Anwendung ausgetauscht werden (das ist sozusagen ausgeschlossen, dass dies geht).

    Um es zum laufen zu bekommen musst Du in Deinem Manifest noch die Release-CRT aufnehmen:

    <dependentAssembly>
          <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
        </dependentAssembly>
    


  • Jochen, danke für den Tipp. Werde ich nachher gleich probieren.

    Ich persönlich würde den Hersteller der LIB bitten auch eine Debug-LIB zur verfügung stellen

    Habe ich schon probiert, zumal es sich um ein weltweit agierendes Unternehmen (das nicht mit M anfängt) handelt. Nur wollen die von ihrer eigenen Software nichts mehr wissen.



  • ich würd jetzt gerne mal testen, das noch mit in das manifest aufzunehmen wie Jochen sagt.

    Aber jetzt meine wahrscheinlich ganz dumme und peinliche Frage:

    Wie erzeuge ich manuell ein Manifest und wo muss das hin? ich hab das
    bis jetzt immer automatisch erzeugen lassen.

    dankö!



  • Warum willst Du es denn von Hand erzeugen?
    Du kannst aber z.B. das einbetten verhindern indem Du es in den Projekteinstellungen deaktivierst...

    Ein Manifest ist einfach eine XML-Datei aus diesem Grunde gibt es da nicht viel zu "Erzeugen"... einfach eine Datei anlegen und reinschriben was Du willst (bzw. was gebraucht wird).



  • Ich will ja erreichen, dass das manifest weiterhin eingebettet wird, nur halt zusätzlich mit den zeilen, die die release-version der libs benötigen.

    oder wo soll ich das hinschreiben?



  • Wenn Du alles so eingestellt lässt sollte es doch gehen... was ist denn Dein Problem?
    Das Manifest wird dann automatisch mit den richtigen Einträgen erzeugt und eingebettet. Poste doch mal den Inhalt der Datei im Debug/Release Verzeichnis:

    Namd-der.exe.intermediate.manifest


Anmelden zum Antworten