2016-06-21 26 views
2

Der folgende Fehler während der Laufzeit aufgetreten:Was verursacht diesen Laufzeitfehler und wie kann ich ihn beheben?

Die Einstiegspunkt Prozedur _ZSt24__throw_out_of_range_fmtPKcz nicht in der Dynamic Link Library "test.exe" gefunden werden kann.

Ich habe einen C++ - Entwerfer verwendet, um herauszufinden, welche Funktion den Eintrittspunktfehler verursacht. Die Funktion ist: std::__throw_out_of_range_fmt(char const*, ...)

ich zu den folgenden Bibliotheken am Verknüpfung:

  • SDL2 (Dynamic, von der Quelle von mir, gleiche Version von GCC kompiliert, die ich für mein Projekt bin mit (4.9.3)).
  • GLEW (Added Quelle zu projizieren)

I SDL2 von der Quelle mit der gleichen Version von GCC kompiliert, die ich in meinem Projekt verwenden, weil ich dachte, dass die vorgefertigte Version war ich mit verursacht hatte irgendwie einen Konflikt in den verschiedenen C++ Standardbibliotheken. Ich versuchte dann dynamisch mit diesem Build zu verknüpfen, aber der genau gleiche Laufzeitfehler blieb bestehen.

Compilation & Linking Script Log (Compiled über einen Windows-Batch-Skript):

C:\Users\Harrand\Desktop\Ocular GEng\src\camera.o 
C:\Users\Harrand\Desktop\Ocular GEng\src\datatranslation.o 
C:\Users\Harrand\Desktop\Ocular GEng\src\glew.o 
C:\Users\Harrand\Desktop\Ocular GEng\src\light.o 
C:\Users\Harrand\Desktop\Ocular GEng\src\listeners.o 
C:\Users\Harrand\Desktop\Ocular GEng\src\matrix.o 
C:\Users\Harrand\Desktop\Ocular GEng\src\mesh.o 
C:\Users\Harrand\Desktop\Ocular GEng\src\model_loader.o 
C:\Users\Harrand\Desktop\Ocular GEng\src\object.o 
C:\Users\Harrand\Desktop\Ocular GEng\src\quaternion.o 
C:\Users\Harrand\Desktop\Ocular GEng\src\shader.o 
C:\Users\Harrand\Desktop\Ocular GEng\src\stb_image.o 
C:\Users\Harrand\Desktop\Ocular GEng\src\test.o 
C:\Users\Harrand\Desktop\Ocular GEng\src\texture.o 
C:\Users\Harrand\Desktop\Ocular GEng\src\timekeeper.o 
C:\Users\Harrand\Desktop\Ocular GEng\src\utility.o 
C:\Users\Harrand\Desktop\Ocular GEng\src\vector.o 
C:\Users\Harrand\Desktop\Ocular GEng\src\window.o 
C:\Users\Harrand\Desktop\Ocular GEng\src\world.o 
     19 file(s) moved. 
Compilation Completed, ".o" files are in "C:\Users\Harrand\Desktop\Ocular GEng\cpl\Thu 08.25.2016" 
Using built-in specs. 
COLLECT_GCC=g++ 
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.9.3/lto-wrapper.exe 
Target: mingw32 
Configured with: ../src/gcc-4.9.3/configure --build=x86_64-pc-linux-gnu --host=mingw32 --prefix=/mingw --disable-win32-registry --target=mingw32 --with-arch=i586 --enable-languages=c,c++,objc,obj-c++,fortran,ada --enable-static --enable-shared --enable-threads --with-dwarf2 --disable-sjlj-exceptions --enable-version-specific-runtime-libs --enable-libstdcxx-debug --with-tune=generic --enable-nls 
Thread model: win32 
gcc version 4.9.3 (GCC) 
COMPILER_PATH=c:/mingw/bin/../libexec/gcc/mingw32/4.9.3/;c:/mingw/bin/../libexec/gcc/;c:/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../../mingw32/bin/ 
LIBRARY_PATH=c:/mingw/bin/../lib/gcc/mingw32/4.9.3/;c:/mingw/bin/../lib/gcc/;c:/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../../mingw32/lib/;c:/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../ 
COLLECT_GCC_OPTIONS='-v' '-LC:\Users\Harrand\Desktop\Ocular GEng\lib' '-LC:\Users\Harrand\Desktop\Ocular GEng\Lua\5.3.2\lib' '-o' 'oculargame-test.exe' '-shared-libgcc' '-mtune=generic' '-march=i586' 
c:/mingw/bin/../libexec/gcc/mingw32/4.9.3/collect2.exe -plugin c:/mingw/bin/../libexec/gcc/mingw32/4.9.3/liblto_plugin-0.dll -plugin-opt=c:/mingw/bin/../libexec/gcc/mingw32/4.9.3/lto-wrapper.exe -plugin-opt=-fresolution=C:\Users\Harrand\AppData\Local\Temp\ccUhcnbk.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -Bdynamic -u ___register_frame_info -u ___deregister_frame_info -o oculargame-test.exe c:/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../crt2.o c:/mingw/bin/../lib/gcc/mingw32/4.9.3/crtbegin.o -LC:\Users\Harrand\Desktop\Ocular GEng\lib -LC:\Users\Harrand\Desktop\Ocular GEng\Lua\5.3.2\lib -Lc:/mingw/bin/../lib/gcc/mingw32/4.9.3 -Lc:/mingw/bin/../lib/gcc -Lc:/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../../mingw32/lib -Lc:/mingw/bin/../lib/gcc/mingw32/4.9.3/../../.. camera.o datatranslation.o glew.o light.o listeners.o matrix.o mesh.o model_loader.o object.o quaternion.o shader.o stb_image.o test.o texture.o timekeeper.o utility.o vector.o window.o world.o -lOpenGL32 -lSDL2 -lSDL2main C:\Users\Harrand\Desktop\Ocular GEng\res\exe\ocular.res -lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt c:/mingw/bin/../lib/gcc/mingw32/4.9.3/crtend.o 
     1 file(s) moved. 
Linking Completed, "oculargame-test.exe" is in "C:\Users\Harrand\Desktop\Ocular GEng\cpl\Thu 08.25.2016\lnk" 

Nur Fehlermeldung während der Laufzeit gedruckt ist der Titel dieser Frage. Ich Verknüpfung mit der folgenden Libs:

  • libSDL2.a (DLL implib für SDL2)
  • libSDL2main.a

ich nur die Verknüpfung zu dem Dynamic Link Library libSDL2.dll. Mein früherer Verdacht war, dass SDL2 bereits vor dem Kompilieren selbst kompiliert wurde. In den Compiler-Versionen gab es einen Konflikt. Allerdings weiß ich jetzt, dass dies nicht der Fall ist. Könnte dieser Fehler irgendwie durch die Tatsache verursacht werden, dass ich den GLEW-Quellcode zu meinem Projekt hinzugefügt habe?

+0

Ich habe das gleiche Problem und von dem, was ich fand, ist es, weil einige der Bibliotheken mit verschiedenen Versionen des Compilers kompiliert und mit verschiedenen Versionen von Standard-C++ - Bibliotheken als das, was Sie verwenden, um Ihre eigene App zu kompilieren.Sie müssen entweder den gleichen Compiler installieren, der für diese Bibliotheken verwendet wurde, oder ihre Quellen herunterladen und sie mit Ihrem aktuellen Compiler kompilieren. Wenn du es versuchst, sag mir, ob es funktioniert. – Youda008

+0

@ Youda008 Ich verstehe, was Sie gesagt haben, und ich glaube, Sie haben Recht. Als das Problem jedoch zum ersten Mal auftrat, trat der Fehler nicht jedes Mal auf, wenn ich versuchte, das Programm auszuführen. manchmal lief es ohne Fehler, wenn ich keine Änderungen vornahm! Außerdem können Sie meine letzte Bearbeitung überprüfen, um eine von mir vorgenommene Umsetzung zu sehen. Ich bin wieder einmal verloren, und wenn Sie Informationen zu bieten haben, würde ich es begrüßen. – Harrand

Antwort

1

Mein Anfangsverdacht war nicht korrekt, aber auf den richtigen Spuren: Die Version von MinGW, die ich verwenden wollte, war NICHT die gleiche wie die Version von MinGW, die ich vor langer Zeit in den Systempfad installiert habe. Der Effekt davon war, dass die Abhängigkeit, die eine ausführbare Datei auf den G ++ - DLLs hat, standardmäßig auf die DLLs der Version von MinGW abzielte, die ich installiert hatte; die falsche Version. Dies verursachte den Laufzeitfehler.

"C:\MinGW\bin\g++"*.o -L%libdir% -L"%scriptdir%\Lua\5.3.2\lib" -lOpenGL32 -lSDL2 -lSDL2main "%scriptdir%\res\exe\ocular.res" -o "oculargame-test.exe" 

mit

"C:\MinGW\bin\g++" -static-libgcc -static-libstdc++ *.o -L%libdir% -L"%scriptdir%\Lua\5.3.2\lib" -lOpenGL32 -lSDL2 -lSDL2main "%scriptdir%\res\exe\ocular.res" -o "oculargame-test.exe" 

Ich habe die Flaggen -static-libgcc -static-libstdc++ auf den Befehl, so dass die MinGW-Version, die ich wollte verwenden (in „C:

wurde durch Ersetzen Dieses Problem wurde korrigiert \ MinGW \ bin ") würde die Abhängigkeiten statisch in die ausführbare Datei einbinden, so dass der Konflikt nicht auftreten würde. Ich hoffe, dies hilft anderen mit ähnlich kniffligen Problemen.