C++ [MS Visual 2008] Was ist msvcr90.dll?

Registriert
Dez. 2009
Beiträge
213
Ich habe gerade mit Microsoft Visual Studio 2008 pro eine DLL erstellt. Depandancy-Walker zeigt mir an, dass ausser Kernel32.dll auch noch eine msvcr90.dll benötigt wird. Der Vermerk ist rot unterlegt, d.h. die DLL kann Depandancy-Walker nicht finden. Kann meine DLL auch ohne die msvcr90.dll laufen? Oder muss ich meine DLL, wenn ich sie für ein Teamprojekt benötige, mit der msvcr90.dll ausliefern? Wenn ja, woher bekomme ich die msvcr90.dll? Darf ich diese überhaupt einfach so weitergeben (Wegen MS-Urheberrechte und so...)? Über Google kam ich auf einen Microsoft-Artikel, in dem etwas über Visual C Redistributable-Package stand. Hängt das mit dem zusammen, bzw. muss dieses riesige Redistributable-Package auf dem Zielsystem installiert sein?
 
Soweit ich weiss stecken in dieser dll die Core-Funktionen von VS 2008. Ohne die duerfte deine dll nicht lauffaeihig sein. Wenn mich nicht alles taeuscht steckt diese auch in den C++ Redistributable Pakten die div. Anwendungen installieren um lauffaehig zu sein.

Ohne Gewaehr. Korrigiert mich bitte wenn ich was Falsches schreibe ;)
 
abkuerzungen bestimmen die welt...

microsoft visual c runtime versionsnummer 9.0

lmgtfy
 
Ok, muss das Laufzeit-Paket installiert sein oder reicht es, die msvcr90.dll mitzugeben? Darf ich die msvcr90.dll eigentlich weitergeben? Wieso hat Depandanc-Walker bei mir eigentlich die msvcr90.dll nicht angezeigt?
 
Sehr schön.


problemlöser64 schrieb:
Ich habe gerade mit Microsoft Visual Studio 2008 pro eine DLL erstellt. Depandancy-Walker zeigt mir an, dass ausser Kernel32.dll auch noch eine msvcr90.dll benötigt wird. Der Vermerk ist rot unterlegt, d.h. die DLL kann Depandancy-Walker nicht finden. ...

problemlöser64 schrieb:
Wieso hat Depandanc-Walker bei mir eigentlich die msvcr90.dll nicht angezeigt?

:rolleyes:

Man könnte ja den Code auch so generieren, dass die DLL nicht von dieser Bibliothek abhängig gemacht wird (Compiler-Optionen, Codegenerierung) ...
 
OK, vielleicht etwas undeutlich ausgedrückt: DEPENDS zeigt mit msvcr90.dll an, aber eben rot hinterlegt, d.h. sie fehlt!

Ich weiss nicht, ob ich, wenn ich nicht mit msvcr90.dll linke, die Funktionen wie fread, strncmp, etc.... noch nutzen könnte.
 
Die msvcrt wird rot angezeigt, weil die im WinSxS-Ordner liegt, der erst zur Ausführungszeit bestimmt wird/werden kann.

Hmm, bei mir zumindest nicht.
Die Side-by-Side (SxS) Konfiguration ist aber ein sehr wichtiger Punkt, und soweit ich weiß, hinterlegt der Dep-Walker ein Modul auch rot wenn die SxS Konfiguration nicht stimmt. Eine entsprechende Meldung sollte dann aber im Dep-Walker Log ausgegeben werden.

Grundsätzlich hab ich noch nicht verstanden: Wird die msvcr90.dll als nicht-existent/fehlerhaft auf DEINEM System (auf dem du deine DLL erstellt hast) angezeigt, oder auf einem ANDEREN System?
 
problemlöser64 schrieb:
Depandancy-Walker


Ok, ich weiß ich bin ein unverbesserlicher Klugscheißer, und es hat auch nix mit deinem Problem zu tun, aber es heißt Dependency - da sind keine a's drin. ;)
Ergänzung ()

problemlöser64 schrieb:
Über Google kam ich auf einen Microsoft-Artikel, in dem etwas über Visual C Redistributable-Package stand. Hängt das mit dem zusammen, bzw. muss dieses riesige Redistributable-Package auf dem Zielsystem installiert sein?

Ja, muß es (und so riesig ist es nun auch wieder nicht). Auf Rechnern, die das Visual Studio 2008 installiert haben, sind die DLLs automatisch vorhanden. Auf anderen Rechnern müssen die nötigen DLLs über das Redistributable-Package bereitgestellt werden.
 
OK, danke erstmal für eure Antworten.

Ich habe meine DLL noch nie auf einem anderen System getestet, aber ich hatte Bedenken, als ich den Eintrag im Dependency-Walker sah, und wohl auch zurecht.

Ich habe jetzt noch ein par kleine Fragen:

1. Kann ich irgendwie so kompilieren bzw. linken, dass die Codes aus der msvcr90.dll automatisch in die EXE mit reingelinkt werden, sodass ich also keine msvcr90.dll mehr brauche? Es wurde eine Kompileroption gepostet, aber was macht die genau?

2. Reicht es, wenn ich die msvcr90.dll einfach in das Verzeichnis der EXE reinkopiere und das Projekt dann so weitergebe? Und wenn ja, darf ich das aus Urheberrechten von Microsoft überhaupt?

3. Es wird wahrscheinlich nicht die zentrale Antwort sein, aber was ist die Windows SxS-Konfiguration?
 
Zu:
1.: Ja unter Projekteinstellungen->Konfigurationseinstellungen->C++->Codegenerierung->Laufzeitbibliothek

2.: dll kopieren -> geht net -> siehe WinSxS

3.: WinSxS ist ein System, um verschiedene Versionen von DLLs unter einem Namen verfügbar zu machen. Damit das fuktioniert ist relativ viel gewurschtel nötig (Manifest...), sodass man normalerweise besser gar nichts ändert. Falls du Englisch verstehst
 
1. Kann ich irgendwie so kompilieren bzw. linken, dass die Codes aus der msvcr90.dll automatisch in die EXE mit reingelinkt werden, sodass ich also keine msvcr90.dll mehr brauche? Es wurde eine Kompileroption gepostet, aber was macht die genau?
Kurze Antwort: Statisches (ohne DLL) statt dynamisches Linken (mit DLL).
Lange Antwort: Die msvcr*.dll sind die C-Runtime-Libraries (nicht C++, die heissen dann msvcp*.dll). Siehe z.B. http://msdn.microsoft.com/en-us/library/abx4dbyh.aspx.
Beim statischen Linken gegen diese Bibliothek besitzt jedes Modul (DLL oder EXE) seinen eigenen "Laufzeit-Kontext" während beim dynamischen Linken dieser Kontext geteilt/shared wird. Das bedeutet z.B., dass beim statischen Linken jedes Modul seine eigene Verwaltung des dynamischen Speichers aka Heap (new bzw. delete) besitzt. Die Konsequenz davon ist, dass Speicher der in einem Modul allokiert (new) wird nicht in einem anderen Modul freigegeben (delete) werden kann. Beim dynamischen Linken ist dies, zumindest theoretisch, möglich.

2. Reicht es, wenn ich die msvcr90.dll einfach in das Verzeichnis der EXE reinkopiere und das Projekt dann so weitergebe? Und wenn ja, darf ich das aus Urheberrechten von Microsoft überhaupt?
Einfach in das Verzeichnis reinkopieren würde ich NIE machen. Leg den korrekten MS Redistributable-Installer dazu. Afaik (aber ohne Gewähr!!!) gibts damit keine Probleme mit dem Copyright. Zur Sicherheit kannst du auch auf die entsprechende MS-Seite verlinken. Unbedingt merken/beachten: Für die Debug-Version aller MS-Runtime-Libs gelten andere Bestimmungen!

3. Es wird wahrscheinlich nicht die zentrale Antwort sein, aber was ist die Windows SxS-Konfiguration?
Die Side-by-Side Konfiguration. Siehe z.B. http://en.wikipedia.org/wiki/DLL_hell oder

http://en.wikipedia.org/wiki/Side-by-side_assembly
 
Zuletzt bearbeitet: (Da war jemand wegen meinem langen Post schneller...)
Zurück
Oben