2016-06-21 4 views
2

次のエラーが実行時に発生しました:このランタイムエラーの原因は何ですか?どのように修正できますか?

プロシージャエントリポイント_ZSt24__throw_out_of_range_fmtPKczがダイナミックリンクライブラリ「TEST.EXE」に位置することができませんでした。

私は、どの機能がエントリポイントエラーを引き起こしているかを知るためにC++デマングラを使用しました。 機能は次のとおりです。std::__throw_out_of_range_fmt(char const*, ...)

私は次のライブラリにリンクしています:私は私のプロジェクトのために使用しています自分でソースからコンパイル

  • SDL2(ダイナミック、GCCの同じバージョン(4.9.3 ))。私は私が使っていた事前に構築されたバージョンは何とか競合の原因となっていたことを考えたので、私は私のプロジェクトで使用GCCの同じバージョンでソースからSDL2をコンパイル

  • GLEW(プロジェクトに追加ソース)さまざまなC++標準ライブラリに含まれています。私はこのビルドに動的にリンクしようとしましたが、まったく同じランタイムエラーが続きました。

    コンパイル&リンクスクリプトログ(Windowsのバッチスクリプトを経由してコンパイル):

    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" 
    

    ランタイム中に印刷されただけのエラーメッセージは、この質問のタイトルです。私は次のLIBSにリンクしています:

    • libSDL2.a(SDL2用DLLのIMPLIB)
    • libSDL2main.a

    私は、ダイナミックリンクライブラリlibSDL2.dllにリンクしています。私の以前の疑念は、SDL2は自分でコンパイルする前にあらかじめビルドされていたため、コンパイラのバージョンに競合があったということでした。しかし、私は今これが事実ではないことを知っています。私のプロジェクトにGLEWソースコードを追加したという事実によって、このエラーが何らかの原因で発生する可能性がありますか?

  • +0

    同じ問題があり、いくつかのlibsが異なるバージョンのコンパイラでコンパイルされていて、独自のアプリケーションをコンパイルするために使用しているものとは異なるバージョンの標準C++ライブラリにリンクされているためです。これらのlibに使用されたのと同じコンパイラをインストールするか、ソースをダウンロードして現在のコンパイラでコンパイルする必要があります。それを試してみたら、それがうまくいくか教えてください。 – Youda008

    +0

    @ Youda008私はあなたの言ったことを理解し、あなたが正しいと信じています。しかし、問題が最初に発生したとき、プログラムを実行しようとするたびにエラーは発生しませんでした。時々、私は何の変更もしなかったが、何の誤りもなく走った!さらに、最新の編集を確認して、私が実現したことを確認することができます。私はもう一度迷っています。あなたが提供する情報があれば、私はそれを歓迎します。 – Harrand

    答えて

    1

    私の最初の疑惑は正しくありませんでしたが、適切なトラックで:私が使用しようとしていたMinGWのバージョンは、私がずっと前にシステムパスにインストールしたMinGWのバージョンと同じではありませんでした。これの効果は、実行可能ファイルがG ++ DLLに与える依存性が、デフォルトで、私がインストールしたMinGWのバージョンのDLLを対象としていることでした。間違ったバージョン。これにより、ランタイムエラーが発生しました。

    この問題は、交換することによって解決されました:私は(C」で使用していたのMinGWのバージョンように、私はコマンドに-static-libgcc -static-libstdc++フラグを追加

    "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" 
    

    "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" 
    

    で:\ MinGW \ bin ")は、競合が発生しないように依存関係を実行可能ファイルに静的にリンクします。私はこれが同様に扱いにくい問題で他人を助けることを願っています。

    関連する問題