sdl projekt startet nicht auf fremden pcs



  • ich habe es auf release kompiliert und natürlich SDL.dll mit auf dem fremden pcs mitkopiert aber das Programm startet trotzdem nicht auf fremden PCs.

    Da kommt immer ne Fehlermeldung dass die Anwendungskonfiguration nicht korrekt sind und ich es neuinstallatieren soll. Dabei hat mein Programm kein Setup. es ist nur ne exe - mehr nicht. die nur auf dem pc funktioniert wo mein visual studio ist.

    edit: hmm 2 andere rechner haben auch visual studio aber es geht trotzdem nicht. nur hier



  • Du hast also mit MS Visual Studio gearbeitet.

    Wenn ich mich richtig erinnere, dann brauchst du noch so einen kostenlosen Zusatz von MS, damit es auf anderen Computern läuft. Den Namen weiß ich jetzt nicht mehr.
    Such mal im Forum, da gibt's ne Menge Themen zu diesem Problem.

    Mfg



  • hm ich hab visual studio 2005 und hab jetzt service pack 1 installiert. es geht aber immer noch nicht

    Microsoft Visual C++ 2005 Redistributable Package (x86) aufm zielrechner installiert.

    mal manifest aktiviert oder deaktiviert - nix !

    multithreading (MT) macht kompilerfehler

    nichts bringt was!



  • wenn du das SP 1 installiert hast, dann musst du auch das redistributable sp1 auf dem anderen rechner installieren, neustart hilft auch mal



  • oh man ich dreh durch - ich hab auch noch gleich visual studio installiert und von dort aus kompiliert. es geht immer noch nicht!!! da stimmt was mit dem pc nicht

    mit dem notebook hatte ich auch mal programmiert, ich kopierte einfach die quellcodes dahin und es lief. aber wenn ich von main pc aus kompiliere und auf notebook ausführe, kommt die gleiche fehlermeldung mit anwendungskonfiguration

    kann das programm immer nur abhängig von 1 pc sein???

    und dass aufm anderen pc gar nichts funktioniert verstehe ich auch nicht



  • ich hab es mit Dev C++ kompiliert und jetzt funktioniert es einwandfrei. Dev C++ muss wirklich viel besser sein.

    Allerdings funktioniert das Konsolenfenster nicht mehr, die immer mitstartet wenn SDL-Fenster gestartet wird. Das Konsolenfenster ist zwar da, aber es zeigt nichts an - keine Ausgabe.

    Obwohl unter Generals Type auf Console gestellt ist. Vielleicht muss ich da ein bißchen was einstellen?


  • Mod

    xBlackKnightx schrieb:

    ich hab es mit Dev C++ kompiliert und jetzt funktioniert es einwandfrei. Dev C++ muss wirklich viel besser sein.

    du bist ja schoen am bashen. wenn ein rechner auf dem neusten stand ist, dann geht das sicher mit dem verteilen von anwendungen. du kannst in den VS einstellungen auch die libs statisch linken, das kann einem manchmal auch ein wenig mehr rechner erschliessen.
    aber ich glaube dazu gab es hier schon recht viele threads.



  • ich hab schon viel rumgegoogelt (7std)

    schwierig genug das hier rauszufinden:

    Projekt --> <PROJEKTNAME>-Eigenschaften --> Konfigurationeigenschaften --> Allgemein --> Verwendung von MFC
    und hier bitte auf "MFC in einer statischen Bibliothek verwenden" auswählten. Erstellen--- fertig 🙂

    aber es funktioniert immer noch nicht, es kommen dann
    release:

    manipulator.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_SendInput@12".
    L:\CPP\Programmierung\ExistenzForschungConsole\Release\ExistenzForschung.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise

    debug:

    LINK : warning LNK4098: Standardbibliothek "LIBCMT" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.
    LINK : warning LNK4199: /DELAYLOAD:OleAcc.dll wird ignoriert; keine Importe von OleAcc.dll gefunden.
    libcpmtd.lib(xmbtowc.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__CrtDbgReportW".
    main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__CrtDbgReportW" in Funktion ""protected: virtual char const * __thiscall std::ctype<char>::_Do_widen_s(char const *,char const *,char *,unsigned int)const " (?_Do_widen_s@?$ctype@D@std@@MBEPBDPBD0PADI@Z)".
    object.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__CrtDbgReportW".
    libcpmtd.lib(cout.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__CrtDbgReportW".
    libcpmtd.lib(stdthrow.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__CrtDbgReportW".
    manipulator.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_SendInput@12" in Funktion ""void __cdecl MouseLeftClick(void)" (?MouseLeftClick@@YAXXZ)".
    libcpmtd.lib(xdebug.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__malloc_dbg" in Funktion ""void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z)".
    libcpmtd.lib(xmbtowc.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__malloc_dbg".
    libcpmtd.lib(xdebug.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__free_dbg" in Funktion ""void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z)".
    libcpmtd.lib(xmbtowc.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__free_dbg".
    libcpmtd.lib(_tolower.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__calloc_dbg" in Funktion "__Getctype".
    LIBCMT.lib(wwincrt0.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_wWinMain@16" in Funktion "___tmainCRTStartup".
    L:\CPP\Programmierung\ExistenzForschungConsole\Debug\ExistenzForschung.exe : fatal error LNK1120: 6 nicht aufgelöste externe Verweise.

    🙄



  • wenn es da steht dass es bereits definiert ist, wie deaktiviere ich msvcrt.lib?



  • Projekt --> <PROJEKTNAME>-Eigenschaften --> Konfigurationeigenschaften --> Linker --> Eingabe --> Bibliothek ignorieren:

    Hier kannst du die Bibliothek ignoriren, aber welche?
    vermutte --> LIBCMT



  • nada

    hab auch msvcrt.lib eingegeben. weniger fehler auf release zumindest, aber SDL fehlt dann wieder

    abhängige includes:

    #include "SDL/SDL.h"
    #include "SDL/SDL_image.h"
    #include "SDL/SDL_ttf.h"
    #include "SDL/SDL_thread.h"
    #include <string>
    #include <sstream>
    #include <iostream>
    #include "windows.h" // don't use that on other os plattforms !
    #include <winable.h> // for sendinput
    

    kein bock monatelang damit rumzustudieren

    ich such lieber nach möglichkeiten mit der console auf dev c++



  • Wiso kompielirt er plözlich nicht.
    hast du nur MFC Lib auf statisch gestellt



  • ähm ja nur MFC auf statisch gestellt

    Laufzeitbibliothek noch auf Multithreaded-DLL - hab aber auch immer hin und her geschaltet zwischen MT und MD

    ich muss sagen dass ich mit visual studio leider nicht so gut auskenne. ich weiss zumindest wie man was linken kann, auf console oder win32 umstellt, wie debugging in einzelschritte funktioniert usw

    mir ist auch bewußt dass die exe nicht 17 KB groß sein kann. es müßte mindestens 700 kb groß sein damit was stimmen kann



  • xBlackKnightx schrieb:

    ähm ja nur MFC auf statisch gestellt

    Wenn du MFC verwendest ok versuchs.

    xBlackKnightx schrieb:

    Laufzeitbibliothek noch auf Multithreaded-DLL - hab aber auch immer hin und her geschaltet zwischen MT und MD

    MT is gut je nach dem ob debug (MTd) oder nicht (MT)

    xBlackKnightx schrieb:

    ich muss sagen dass ich mit visual studio leider nicht so gut auskenne. ich weiss zumindest wie man was linken kann, auf console oder win32 umstellt, wie debugging in einzelschritte funktioniert usw

    Nach dem du ein neuen Win32 Project erstellt hast mus du:

    C/C++ --> Allgemein --> Nach 64 Bit portabilitätsproblemen suchen: Nein
    C/C++ --> Codegenerirung --> Laufzeitbibliothek: MT // wie oben beschrieben

    je nach dem ob oden nicht
    C/C++ --> Vorcompilierte Header --> // verwenden oder nicht einstellen

    Linker --> Eingabe --> Zusätzlichen Abh.: user32.lib gdi32.lib und die von SDL *.lib

    Linker --> Eingabe --> Bibliothek ignorieren: erstmals lehr lassen,
    compiliren und schauen, wenn er mekert, meistens libc.lib eingeben.

    xBlackKnightx schrieb:

    mir ist auch bewußt dass die exe nicht 17 KB groß sein kann. es müßte mindestens 700 kb groß sein damit was stimmen kann

    Doch, wenn du DLL verwendest 17 kByte, wenn du static Linkst dann 700 kByte

    Hofentlich hilft dir das weiter 😉



  • hi da bin ich wieder
    danke für die mühe!

    je nach dem ob oden nicht
    C/C++ --> Vorcompilierte Header --> // verwenden oder nicht einstellen

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

    fatal error C1010: Unerwartetes Dateiende während der Suche nach dem vorkompilierten Header. Haben Sie möglicherweise vergessen, im Quellcode "#include "stdafx.h"" einzufügen?

    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?



  • 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 )


Anmelden zum Antworten