17

Qt5 を 32 ビット Windows 用の Mingw-w64 プロジェクトのコンパイラで (どういうわけか) クロスコンパイルすることができました。すべてのライブラリが にインストールされました~/i686-w64-mingw32

クロスコンパイルしようとしている CMake ベースの Qt プロジェクトがあります。これらの指示に従うことで、プロジェクトをコンパイルすることができました。ここまでは順調ですね。

残念ながら、結果のバイナリを Windows で実行すると、エラーが発生します。

「プロシージャ エントリ ポイント __gxx_personality_sj0 がダイナミック リンク ライブラリ [application_name].exe に見つかりませんでした」

* [application_name] は、メインの実行可能ファイルへのフル パスです。

この種の問題は、異なるバージョンの MinGW でコンパイルされたライブラリが混在していることが原因であると聞いたことがあります。しかし、このマシン上のすべてのもの (すべてのライブラリーと実行可能ファイル) はすべて、同じコンパイラー (i686-w64-mingw32ツールチェーン) によってコンパイルされています。

また、ファイルの 1 つではなく、アプリケーションの実行可能ファイルからエントリ ポイントが欠落しているというエラーが表示されるのも奇妙.dllです。

このエラーの原因は何ですか?また、それを修正するにはどうすればよいですか?

4

2 に答える 2

19

間違ったライブラリの場所を見つける:

  • コマンドプロンプトを開きます。
  • 「libstdc++-6.dll」と入力し、「Enter」を押します
  • パスとメッセージを含むメッセージ ボックスが表示されます: c:/somefolder/someapp/.../libstdc++-6.dll This file does not have a program associated with it... etc. パスが答えです.
  • IDE 内からアプリを実行する: IDE の %PATH% は、コマンド プロンプトの %PATH% とは異なる場合があります (IDE 設定を参照)。その場合、「libstdc++-6.dll」をバッチ ファイルに入れ、IDE 内からバッチを実行すると、プログラムがライブラリのどの特定のインスタンスを取得しているかが表示されます。

私の個人的な解決策:

  • 「システム プロパティ」->「環境変数」(私の場合は Windows 7) を開き、両方の %PATH% 変数 (アカウント用のものとシステム全体の変数 %PATH%) が c:\mingw で始まることを確認します。 \bin (またはライブラリの任意のパス)。また、新しい PATH を取得するために IDE を再起動する必要がある場合もあります。

私の経験では、%PATH% 内の場所を選択する MS Windows の方法は非常に不安定な場合があります。前回は、1 つの関数を含む 1 つのソース ファイルを追加し、その関数をコードに含めました。すべての関数のコードを削除し、'return' ステートメントだけを残した場合でも、プログラムは常に間違った libstdc++-6.dll を選択します。その関数がコメント アウト (除外) されるたびに、プログラムは再び正常に実行されます。何らかの理由で、Windows が「システム変数」から PATH を選択し、「ユーザー変数」PATH (Windows アカウントの PATH) を回避することがあると思います。

于 2014-01-12T22:44:57.793 に答える