Wieso verlangt ein mit g++ erstelltes Programm die MSVCR120.dll?



  • Hallo,

    ich habe auf meinem Rechner (Windows 8.1) ein kleines Programm erstellt, was zu bestimmten Anlässen ein e-mail verschickt und bei mir ohne Problem funktioniert. Auf dem Rechner (Windows NT), auf dem das Programm laufen soll bekomme ich jetzt die Fehlermeldung, dass die MSVCR120.dll fehlt.

    Geschrieben habe ich das Programm in C++ und erstellt mit Hilfe von Code::Blocks und mingw. Ich verwende winsock, openSSL und die c++ Standardbibliothek.

    Wieso braucht das erstellte Programm eine DLL von Visual Studio? Es ist doch eigentlich nichts angegeben, dass die DLL mit verlinkt werden soll.

    Ich weiß, ich bräuchte die DLL wohl nur mit zum Programm packen, aber ich verstehe nicht, wofür sie überhaupt gebraucht werden sollte.



  • George999 schrieb:

    Ich verwende winsock

    Ohne irgendeine Ahnung davon zu haben, wuerde ich einfach mal raten, dass das hier das Problem ist.



  • Die verwendete winsock2.h und libwsock32.a sind vom mingw bzw. aus dessen Verzeichnis.



  • Dann schau mal mit dem DependencyWalker nach, welche DLL die MSVCR120.dll heranzieht.



  • Habe den DependencyWalker ausprobiert. Konnte die DLL aber nicht in der Liste finden. Bekomme jede menge Fehlermeldungen, dass er Dateien, die fast alle mit API-MS-WIN-... anfangen, nicht finden kann. In der Liste ist aber eine DLL namens MSVCRT.DLL. Wie es aussieht wir es von openSSL verwendet.

    Werde ich also die dll mit zur exe ins Verzeichnis packen müssen.

    Danke



  • George999 schrieb:

    Werde ich also die dll mit zur exe ins Verzeichnis packen müssen.

    Weiss nicht ob das reicht.
    Versuchs aber ruhig und lass uns das Ergebnis wissen.

    Du kannst aber auf jeden Fall die Visual C++ Runtime DLLs als .msi Paket bzw. über Merge-Modules installieren. Das .msi Paket gibt's auch für User bei Microsoft runterzuladen. Und die Merge-Module findest du auf PCs wo Visual Studio installiert ist in C:\Program Files (x86)\Common Files\Merge Modules .

    Oder, was vielleicht die beste Lösung wäre: such die ne OpenSSL DLL die keine Runtime DLL benötigt (bzw. nur eine Runtime DLL die mit Windows mit ausgeliefert wird wie die "originale" MSVCRT.DLL ).



  • Ob es gereicht hätte die DLL zu kopieren, weiß ich nicht. Vermute mal nicht. Habe es auch nicht probiert. Dein (@hustbaer) Tip gefiel mir besser.

    hustbaer schrieb:

    … such die ne OpenSSL DLL die keine Runtime DLL benötigt …

    So habe ich dann noch mal gesucht und bin auf den Seiten von OpenSSL fündig geworden. Unter -> About -> Binaries gibts entsprechende OpenSLL-DLLs zum runterladen.

    Pre-compiled Win32/64 libraries without external dependencies to the Microsoft Visual Studio Runtime DLLs, except for the system provided msvcrt.dll

    Und das Programm läuft ohne weitere DLLs.

    DANKE



  • Dieser Thread wurde von Moderator/in nachtfeuer aus dem Forum Rund um die Programmierung in das Forum C++ (alle ISO-Standards) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Dieser Thread wurde von Moderator/in Arcoth aus dem Forum C++ (alle ISO-Standards) in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten