sdl projekt startet nicht auf fremden pcs



  • xBlackKnightx schrieb:

    heisst das je nach dem ob "stdafx.h" includiert ist oder nicht. oder was meinst du mit "oben" ? wenn ich auf verwenden klicke, kommt

    ja

    xBlackKnightx schrieb:

    mein projekt hat keine stdafx.h includes. sowas kommt man wenn man beim projekt erstellen nicht auf leeres projekt aktiviert oder?
    wofür sind sie überhaupt? müssen sie includiert werden?

    1. ja, denk ich schon?

    2. Sagen wir du hasst 40 .cpp Dateien und in allen includierst du myInclude.h.
    Jetzt kompilierst du alle 40 .cpp Dateien in einem project und jedesmal wenn
    ein #include "myInclude.h" vorkommt, muss der Compiler es parsen, also 40 mal die gleiche Datei myInclude.h. Wenn Vorkompilierte Header eingeschaltet
    ist wird diese Datei myInclude.h einmal geparst und binär gespeicher.
    Wenn jetzt der Compiler auf ein #include "myInclude.h" trifft lädt er die binäre Header Datei, list alle Symbolische informationen raus ohne Zeit zu verschwenden für das Parsen.
    --> schnellere Kompilierung.

    Nein



  • okay ich habe jetzt noch mal von vorne gemacht:

    neues projekt: win32 mit stdafx.h

    alles Schritte von dir gemacht

    so langsam wird es interessant -
    der einzige Konflikt entsteht immer dann:

    sobald ich

    #include "SDL/SDL.h"
    

    inkludiere. nur allein das. der main bleibt leer, dann entsteht compilerfehler.
    immer nur dann, wenn Laufzeitbibliothek auf MT geschaltet ist.

    auf MD ist es dann kein Problem.

    Wenn ich es aufm anderen PC ausführe, kommt Konfigurationsfehler.

    wenn ich SDL include wieder rausnehme, dann geht MT wunderbar
    somit läuft es auf dem PC auch. Allerdings ohne SDL 😕

    ich denke wir kommen da etwas näher
    nun wie geht es weiter?

    Der Fehler sah immer so aus:

    msvcrt.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) ist bereits in LIBCMT.lib(typinfo.obj) definiert.
    msvcrt.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) ist bereits in LIBCMT.lib(typinfo.obj) definiert.
    msvcrt.lib(MSVCR80.dll) : error LNK2005: _isspace ist bereits in LIBCMT.lib(_ctype.obj) definiert.
    msvcrt.lib(MSVCR80.dll) : error LNK2005: ___iob_func ist bereits in LIBCMT.lib(_file.obj) definiert.
    msvcrt.lib(MSVCR80.dll) : error LNK2005: _fclose ist bereits in LIBCMT.lib(fclose.obj) definiert.
    msvcrt.lib(MSVCR80.dll) : error LNK2005: _exit ist bereits in LIBCMT.lib(crt0dat.obj) definiert.
    LIBCMT.lib(crt0init.obj) : warning LNK4098: Standardbibliothek "msvcrt.lib" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.
    L:\CPP\Programmierung\ExistenzForschung\ExistenzForschung\Release\ExistenzForschung.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.

    natürlich habe ich auch einmal libc.lib in Bibliothek ignorieren versucht





  • wenn du das meinst

    Q: When using Visual C++ I get link errors relating to MSVCRT.LIB or LIBC
    A: SDL is dynamically linked with the multi-threaded version of the Microsoft Visual C runtime. You need to edit your project settings, go to the C++ language tab, change the listbox to "Code Generation" settings, and then change the runtime library to "Multi-threaded DLL". Make sure you do this with all projects that you link into your application.

    ja das hört sich so an dass man gar nicht auf MT stellen kann? folglich kann ich sie nicht auf anderen PCs ausführen 😕



  • Ich glaube jetz die richtige Lösung gefunden zu haben.

    Das ganze Problem kommt durch dieses Manifest, man muss es ausschalten.

    Also Projekteigenschafte:

    Manifesttool -> Engabe und Ausgabe -> Manifest einbetten: Nein

    Manifesttool -> Allgemein -> Ausfürliche Ausgabe: Ja
    // für bessere Fehlermeldungen zu Laufzeit ( Message Box )



  • wieder nix

    ich hab mal das projekt hochgeladen. vielleicht funktioniert es nur bei euch?
    www.x-y-a.com/uploads/SDL_Problem.rar

    natürlich muss sdl.dll in system32 vorhanden sein und die ganzen libs in VC

    kriegt ihr das so kompiliert dass es auch auf anderen rechnern läuft?



  • Die Lösung:

    #include <SDL.h>
    
    #ifdef _WIN32
    #undef main
    #endif
    
    int main( int argc, char* args[] )
    {
    
    	SDL_Init( SDL_INIT_EVERYTHING ); 
    	SDL_Quit(); 
    
    	return 0; 
    }
    

    Dieser Code läuft ohne probleme.
    Alle optionen können verwendet werden.
    /MT
    /MTd
    /MD
    /MDd
    die DLL versionen funktioniren auf fremden
    Rechnern nur, wenn man eine manifest erstellt und configuriert.

    Am besten ein neues projekt "leeres Project" erstellen,
    SDL.lib SDLmain.lib nicht vergessen.

    Linker -> System -> Sybsystem: Konsole
    Linker -> System -> Zielcomputer: x86

    kompiliren. 👍

    So einfach 😡
    #undef main <-- bad bad bad 😡 😡 😡 😡

    PS:
    // manifest ausserhalb der exe
    Manifesttool -> Eingabe und Ausgabe -> Manifest einbeten: Nein

    // manifest in die exe integrieren
    Manifesttool -> Eingabe und Ausgabe -> Manifest einbeten: Ja



  • whow

    jetzt funktioniert es

    kennst dich wohl mit VC gut aus?

    das war hart, z.b. darf die exe datei nicht im selben verzeichnis sein, wo manifest-datei ist. (die war bei mir immer vorhanden, obwohl ich sie gar nicht mehr generierte) erst nach dem ich sie gelöscht habe, gings es auf einmal. das hat mich so verwirrt, weil es hätte ja eigentlich funktionieren sollen! das war das heimtückische.

    man müsste alles aufschreiben worauf man achten soll

    ich muss wohl noch einiges rumstellen - später noch, müde erst mal

    Ramsis schrieb:

    So einfach 😡
    #undef main <-- bad bad bad 😡 😡 😡 😡

    ja diese faces interpretieren mich jetzt 😃



  • xBlackKnightx schrieb:

    kennst dich wohl mit VC gut aus?

    eigentlich schon, und wenn nicht dann giebts google



  • Eine bessere Lösung.
    Die Anwendung muss eine win32-Anwendung sein und keine Win32-Konsolenanwendung.
    Kompiliert ohne probleme.

    #include <windows.h>
    #include <SDL.h>
    
    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,	int nCmdShow)
    {
    
        SDL_Init( SDL_INIT_EVERYTHING );
        SDL_Quit();
    
        return 0;
    }
    

Anmelden zum Antworten