Visual Studios 2010のLIBX264-リリースビルドのメモリエラー
-
10-10-2019 - |
質問
アプリケーションを構築し、X264ライブラリをエンコーダーとして使用しています。 MSYS/MINGWを使用して、Windowsシステム用のライブラリを構築しました。ライブラリはデバッグビルドで正常に動作します(デバッグとリリースの両方のビルドがデフォルトのVS2010設定を使用していることに注意してください)。ただし、リリースでは、アクセス違反エラーがX264ライブラリへの最初の呼び出しでスローされます。
Unhandled exception at 0x00905a4d in StreamTest.exe:
0xC0000005: Access violation.
この行でエラーがスローされます。
x264_param_default_preset((params), "veryfast", "zerolatency");
ライブラリをコンパイルする方法を考えていましたが、Windows/Visual StudiosのメモリアラインメントとX264が期待するアラインメントと特に互換性がなかったことについて多くの話をしました。たとえば、MSYSでコンパイルするときは、EnableMemalign-Hackを有効にする必要がありました。このエラーのソースは、リリースビルドの一部の設定を通してのみ現れるメモリアラインメントの問題に起因する可能性があるのではないかと思います。残念ながら、私は詳細についてほとんど何も知らないので、ここに来ました。
メモリアラインメントの問題とこれを引き起こす可能性のある視覚的なスタジオ設定に関する情報をもっと教えてもらえますか?この問題を修正するための他のヒント/ポインターは大歓迎です。
ありがとう。
編集
以下の回答から:
- リンクされた質問から、彼が「デバッガー情報でビルド」を追加した印象を受けます。 G ++でMSYSを介してX264ライブラリを構築しているので、これができるかどうかはわかりません。プロジェクトのビルド設定を確認しましたが、リリースとデバッグの両方でデバッガー情報があります。その投稿で何かを逃したかどうかはわかりませんが、私に知らせてください。
アプリケーションの検証者を試しました。 X264は、アプリVerifier出力に従って、実行不可能なメモリからコードを実行しようとしているようです。
VERIFIER STOP 0000000000000650: pid 0x1B18:
実行不可能なメモリでコードを実行しようとします(最初のチャンス)。
0000000000905A4D : Address being accessed. 0000000000905A4D : Code performing invalid access. 000000000021EA90 : Exception record. Use .exr to display it. 000000000021E5A0 : Context record. Use .cxr to display it.
この出力から収集するものはありますか?
再度、感謝します。
解決
同様の問題を参照してください ここ, 、それがあなたにも役立つかどうかを見てください。
編集
また、アプリケーションを実行したいことを投稿してください Appverifier
編集
私の意見では、「デバッガー情報を使用したビルド」は、最適化スイッチと一緒に-Gスイッチをオンにし、デバッグマクロをオフにすることになります。また、デバッガーが添付されている場合(使用してください gflags )デバッガーでプロセスを開始するには(WindBGのコピーをつかみ、デバッグに使用します)。
Appveriferがプロセスを停止すると、.cxrコマンドを使用してコンテキスト情報を取得します。それは問題を指摘するのに役立つはずです。