私は(どういうわけか)Qt5を32ビットWindows用のMingw-w64プロジェクトのコンパイラとクロスコンパイルすることに成功しました。すべてのライブラリは~/i686-w64-mingw32
にインストールされています。
クロスコンパイルしようとしているCMakeベースのQtプロジェクトがあります。 これらの手順 に従うことで、プロジェクトをコンパイルすることができました。ここまでは順調ですね。
残念ながら、結果のバイナリをWindowsで実行すると、エラーが発生します。
プロシージャエントリポイント__gxx_personality_sj0がダイナミックリンクライブラリ[application_name] .exeに見つかりませんでした。」
* [application_name]はメインの実行可能ファイルへのフルパスです
この種の問題は、異なるバージョンのMinGWでコンパイルされたライブラリを混合することによって引き起こされることがあると聞きました。ただし、このマシン上のすべて(すべてのライブラリと実行可能ファイル)は、すべて同じコンパイラ(i686-w64-mingw32
ツールチェーン)によってコンパイルされています。
また、.dll
ファイルの1つではなく、アプリケーションの実行可能ファイルにエントリポイントがないというエラーが表示されるのは奇妙だと思います。
このエラーの原因と、それを修正するために何ができるでしょうか。
結局、問題はlibstdc++-6.dll
のどこかでわがままな$PATH
が原因であることが判明しました。 Mingw-w64によって作成されたコピーがアプリケーションのディレクトリにあることを確認した後、すべてが機能しました。
間違ったライブラリの場所を見つける:
私の個人的な解決策:
私の経験では、%PATH%内の場所を選択するMSWindowsの方法は非常に不安定な場合があります。前回、1つの関数を含む1つのソースファイルを追加し、その関数をコードに含めました。関数のコードをすべて削除し、「return」ステートメントだけを残した場合でも、プログラムは常に間違ったlibstdc ++-6.dllを選択していました。その関数がコメントアウト(除外)されるたびに、プログラムは再び正常に実行されます。 Windowsが「システム変数」からPATHを選択し、何らかの理由で「ユーザー変数」PATH(WindowsアカウントのPATH)を回避することがあると思います。