Spiel auf anderem PC spielen



  • Hallo,
    ich habe jetzt mein erstes "richtiges" Spiel fertig, allerdings kann ich das nur auf meinem eigenen PC spielen, nicht auf anderen 😕
    Laut Fehlermeldung fehlen die vcruntime14d.dll, die Ucrtbaded.dll und die Msvcp140d.dll... ICh weiß weder wo ich die herbekommen soll, noch hab ich Lust, die auf jedem PC einzeln zu installieren, wie kann ich das umgehen? Ich hab schon gelesen, dass ich dazu einen Release machen muss, und nicht die Debug-version verwenden darf, aber wenn ich das releasen will kommen Fehler in der SDL2main.lib(siehe Screens). Ich hab da zuerst gedacht, ich hätte die ganzen libs nur für den Debugmodus eingefügt, hab aber "alle Konfigurationen" ausgewählt...
    Ich hab wirklich keine Ahnung, was ich da machen soll, vllt kennt hier jemand die Antwort 😃

    Achja, ich benutze Microsoft VisualStudio 2017 und SDL2

    Grüße,
    BOSS2000

    Edit: Hier der Screen vom Fehler:
    http://fs5.directupload.net/images/170528/temp/nbl33rsh.png



  • Auf dem anderen PC muss die "Visual C++ Redistributable" für deine Visual Studio-Version installiert werden, sowie alle anderen dynamischen Bibliotheken, von deinen dein Programm abhängig ist, wie z.B. die SDL-DDLs. Letztere empfehlen sich auf Windows-Systemen direkt in das das selbe verzeichnis zu packen, wo sich auch die .exe-Datei deines Programms befindet, dann werden sie automatisch gefunden.

    Falls noch weitere indirekte Abhängigkeiten bestehen (DLL-Dateien können selbst auch wieder von anderen DLLs abhängig sein), empfehle ich die .exe-Datei mal mit dem Dependency Walker anzuschauen. Dieser bietet eine gute Übersicht über die DLL-Abhängigkeiten deines Programms. Besonders wenn man die verwendeten Bibliotheken nicht komplett selbst kompiliert hat (in dem Fall kennt man die Abhängigkeiten meist recht gut), ist das ein seht nützliches Tool.

    Zusatz: Sorry, ich habe deinen Post gerade nur überflogen, ich sehe du willst die Abhängigkeiten gänzlich vermeiden. Das geht, indem du die Bibliotheken statisch linkst. Für die Visual C++-Runtime geht das, indem du unter den Einstellungen für dein Projekt unter C/C++ -> Code Generation -> Runtime Library eine Nicht-DLL-Variante auswählst: z.B. "Multi-threaded (/MT)" für Release-Builds oder "Multi-threaded Debug (/MTd)" für Debug-Builds. Für SDL benötigst du dafür eine statische Variante der Bibliothek (die eingebundenen .lib-Dateien von SDL). Das hat nichts mit Debug/Release zu tun!. Recherchiere mal nach "SDL static library" und schau, wo du so etwas findest, falls du SDL nicht selbst bauen möchtest. Eventuell wird die kompilierte Version von SDL bereits schon mit einer statischen Variante ausgeliefert, dann musst diese statt den .lib-Dateien für die DLL-Version verwenden (unter Visual Studio üblicherweise unter Linker -> Input -> Additional Dependencies).

    Weiterer Zusatz: Die .lib-Dateien der SDL verweisen intern wahrscheinlich ebenfalls auf Funktionen der Visual C++-Runtime, je nachdem für welche Variante (Debug/Release) sie kompiliert wurden. Du benötigst in jedem Fall auch eine Release-Variante der .lib-Dateien der SDL, welche die Release-Variante der Runtime verwenden, ansonsten kann es zu solchen Fehlern kommen, wie dem den du beobachtest.



  • Aber dafür muß die Anwendung aber auch im Release-Modus erstellt sein (denn die Debug-Variante darf nicht weitergegeben werden).

    @BOSS2000: Vergleiche die Konfigurationseinstellungen im Debug und Release-Modus, um herauszufinden, woher die Linker-Fehler kommen (wahrscheinlich fehlt doch die SDL-Lib als "input files" in den Linkereinstellungen).


Log in to reply