アプリケーションを構築し、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 Studio でのメモリ アラインメントと、x264 で期待されるアラインメントとの互換性が特にないという話に出くわしました。たとえば、MSys でコンパイルする場合、--enable-memalign-hack を有効にする必要がありました。このエラーの原因が、リリース ビルドの設定によってのみ現れるメモリ アライメントの問題にあるのではないかと考えています。残念ながら、私は詳細についてほとんど何も知らないので、ここに来ました。
メモリの配置の問題と、これを引き起こす可能性のある Visual Studio の設定に関する詳細情報を誰か教えてもらえますか? この問題を解決するためのその他のヒント/ポインターは大歓迎です。
ありがとう。
編集
以下の回答から:
- リンクされたSOの質問から、彼がOpenCVビルドに「デバッガー情報を使用してビルド」を追加したという印象を受けましたか? G ++を使用してMSysを介してx264ライブラリを構築しているため、これを実行できるかどうかわかりません。プロジェクトのビルド設定を確認しましたが、リリースとデバッグの両方でデバッガー情報が含まれています。その投稿で何かを見逃したかどうかわからない場合は、お知らせください。
アプリケーション検証ツールを試しました。App verifier の出力によると、x264 は実行不可能なメモリからコードを実行しようとしているようです。
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.
この出力から収集するものはありますか?
再度、感謝します。