状況は単純ですが、奇妙です。LinearAlgebra.oソース(LAPACKへのリンクが必要)なしでプログラムをコンパイルすると、C++例外がキャッチされて処理されます。そのコンパイルユニットを含めずにライブラリ(-llapack -lblas
)にリンクすると、例外がキャッチされて処理されます。しかし、そこに入ると(コードは正常に実行されます)、C ++例外は正しく処理されなくなり、Windowsクラッシュハンドラー「プログラムが本社へのレポートの応答を停止しました」というナンセンスが発生します。
ここで、このソースファイル内で何が起こっているのかを明らかにします。私はそれをかなり単純に保ちました、しかしそれが本当にコーシャであるかどうかはわかりません。
これは、C++例外が機能しなくなる原因となるFORTRANルーチンの呼び出しに関するものだと思います。しかし、私はこれを修正する方法がわかりません。
アップデート:
この問題の一時的な回避策を見つけて非常にうれしく思います。MinGWのgfortran
コンパイラを使用して、現在使用しているLAPACKおよびBLASルーチンを直接コンパイルしています。
-lgfortran
を使用してこれらのオブジェクトファイルをC++プロジェクトにリンクするg++
と、問題なく動作しますが、例外は引き続き正しく処理されます。ボーナスとして、これにより、使用する予定のLAPACKルーチンのみを含めることができるため、最大4MBのライブラリをリンクする必要がなくなりました。
編集:私がライブラリを静的にリンクする場合、それは「必要なものをつかむ」だけなので、その場合は4MBであっても問題ないと思います。