情况很简单,但很奇怪。当我在没有 LinearAlgebra.o 源(需要链接到 LAPACK)的情况下编译我的程序时,会捕获并处理 C++ 异常。当我不包含该编译单元但仍链接到库 ( -llapack -lblas
) 时,将捕获并处理异常。但是一旦我把它放在那里(它的代码运行得很好),C++ 异常就不再被正确处理,并且我得到 Windows 崩溃处理程序“程序已停止向总部响应报告”的废话。
在这里,我阐明了这个源文件中发生了什么。我确实让它很简单,但我不确定它是否真的是犹太洁食。
我怀疑这是因为调用 FORTRAN 例程导致 C++ 异常停止工作。但我不知道如何解决这个问题。
更新:
我很高兴为这个问题找到了一个临时的解决方法:我正在使用 MinGW 的gfortran
编译器直接编译我当前使用的 LAPACK 和 BLAS 例程。
-lgfortran
使用with将这些目标文件链接到我的 C++ 项目中g++
可以完美地工作,并且我的异常仍然得到正确处理!作为奖励,这允许我只包含我打算使用的 LAPACK 例程,所以现在我不再需要链接 ~4MB 库。
编辑:我认为如果我静态链接一个库,它只会“获取它需要的东西”,所以在这种情况下它是 4MB 并不重要。