Programm läuft nur auf meinem PC



  • Ich habe mich ein wenig mit OpenGl beschäftigt und dabei die Videos von http://www.videotutorialsrock.com/ als Tutorial genutzt. Funktioniert auch alles wunderbar bei mir, jedoch auch nur bei mir, wenn ich die .exe-Dateien zum Testen anderen Leuten gebe bekommen die immer diesen Fehler:

    http://img389.imageshack.us/img389/9169/fehlerle8.png

    Ich habe das Gefühl das liegt an den Einstellungen die bei 2:30 gemacht wurden.
    Und eigentlich hätte ich es schon gerne das meine Programme auch woanders laufen.
    Hoffe ihr könnt mir helfen.



  • statisch gegen c, c++ und mfc runtime linken (compileroption /MT) oder auf dem zielrechner vc-redist installieren (2008 oder 2005, abhängig mit welchem visual studio du es kompiliert hast) 🙂



  • Danke, aber könntest du das bitte etwas ausführlicher erklären 🙂
    Wie linke ich denn statisch gegen C++ ? Ich benutze Visual Studio 2008.



  • projekteinstellungen->c/c++->code generation->runtime library->multithreaded (/MT) (sorry, hab keine deutsche version, es sollte allerdings reichen, dass du es selbst findest :)). achte darauf, dass wenn du gegen andere bibliotheken linkst, diese auch mit den selben einstellungen kompiliert wurden, ansonsten wird der linker meckern, das du gegen zwei verschiedene runtimes gelinkt hast 🙂



  • Danke, aber jetzt spuckt er mir einige Fehlermeldungen aus mit denen ich nix anfangen kann:

    Verknüpfen...
    LINK : warning LNK4098: Standardbibliothek "LIBCMT" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.
    imageloader.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__CrtDbgReportW" in Funktion ""public: char const & __thiscall std::_String_const_iterator<char,struct std::char_traits<char>,class std::allocator<char> >::operator*(void)const " (??D?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDXZ)".
    libcpmtd.lib(stdthrow.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "__CrtDbgReportW".
    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(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(_tolower.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__calloc_dbg" in Funktion "__Getctype".
    C:\Dokumente und Einstellungen[...]\Visual Studio 2008\Projects\C++\opengl_wurfel\Debug\opengl_wurfel.exe : fatal error LNK1120: 4 nicht aufgelöste externe Verweise.
    


  • das ist genau das was ich meine. du linkst gegen eine bibliothek die dynamisch gegen die c/c++ gelinkt ist. wenn du deren quellcode nicht zur verfügung hast um sie mit neuen einstellungen zu kompilieren, so dass alle teile deines projektes statisch gelinkt sind, bleibt dir nichts anderes übrig als auf dem zielrechner die vc runtime (wie oben verlinkt) zu installieren und das projekt dynamisch gegen die c/c++ laufzeit zu linken.



  • So, hab bei einem Bekannten jetzt dieses "Microsoft Visual C++ 2008 Redistributable Package (x86)" installiert, dann das Programm gestartet und es kam wieder der gleiche Fehler.

    edit: laut dependency walker fehlen 5 dlls: GLUT32.DLL, MSVCP90D.DLL, MSVCR90D.DLL, DWMAPI.DLL, EFSADU.DLL



  • Nozdrum schrieb:

    So, hab bei einem Bekannten jetzt dieses "Microsoft Visual C++ 2008 Redistributable Package (x86)" installiert, dann das Programm gestartet und es kam wieder der gleiche Fehler.

    edit: laut dependency walker fehlen 5 dlls: GLUT32.DLL, MSVCP90D.DLL, MSVCR90D.DLL, DWMAPI.DLL, EFSADU.DLL

    du gibst ihm auch einen debug build. das funktioniert nicht, da das redistributable nur die release dll's beinhaltet. die glut32.dll musst du natürlich selbst mit beilegen, da diese natürlich nicht auf jedem system vorhanden ist. ich weiß nicht was efsadu.dll ist, aber wenn es auch eine 3rd-party dll ist, musst du die auch mit beilegen.



  • Du musst eine Release Version erstellen!!! Du versuchst die Debug-Version zu verteilen, was auch noch verboten ist 😉



  • Aha und wie?
    Ich komme mit diese ganzen Untermenüs nicht klar 😞 , warum gibt es diesen ganzen Compile-Kram nicht in einfach.
    edit: Ok, habs auf Release gestellt. Aber immer noch gleicher Fehler.


Anmelden zum Antworten