c++ - MinGW:链接 LAPACK 和 BLAS 导致 C++ 异常无法处理

标签 c++ exception mingw fortran lapack

情况很简单,但很奇怪。当我在没有 LinearAlgebra.o 源代码(需要链接到 LAPACK)的情况下编译我的程序时,会捕获并处理 C++ 异常。当我不包含该编译单元但仍链接到库 (-llapack -lblas) 时,会捕获并处理异常。但是一旦我把它放在那里(它的代码运行得很好),C++ 异常就不再被正确处理,我得到 Windows 崩溃处理程序“程序已停止响应向总部报告”的废话。

Here我阐明了这个源文件中发生的事情。我确实让它很简单,但我不确定它是否真的符合 Kosher。

我怀疑是调用 FORTRAN 例程导致 C++ 异常停止工作。但我不知道如何解决这个问题。

更新:

我很高兴找到了这个问题的临时解决方法:我正在使用 MinGW 的 gfortran 编译器直接编译我当前使用的 LAPACK 和 BLAS 例程。

使用 -lgfortrang++ 将这些目标文件链接到我的 C++ 项目中工作完美,我的异常仍然得到正确处理!作为奖励,这允许我只包含我打算使用的 LAPACK 例程,所以现在我不再需要链接一个 ~4MB 的库。

编辑:我认为如果我静态链接一个库,它只会“获取它需要的东西”,所以在那种情况下它是 4MB 并不重要。

最佳答案

我在 GotoBLAS2 上取得了不错的成绩。运行包含的脚本会生成一个巨大的 19MB 静态库,该库针对我的机器进行了优化。通过简单地链接它,它可以完美地工作。我所有的 Fortran 风格调用都能正常工作。

关于c++ - MinGW:链接 LAPACK 和 BLAS 导致 C++ 异常无法处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8640644/

相关文章:

c++ - 涉及私有(private)继承的 C 风格向上转型和向下转型

java - 如何在 Java 中为错误情况实现 `finally`

java - 使用 mockito 抛出运行时异常时测试是否抛出自定义异常

qt - 无法运行编译qt应用程序。 Qt Creator忽略斜线

c++ - 多个复制构造函数的编译器警告

c++ - 递归函数返回 bool

C++ 子结构位域大小

c# - WCF 错误和异常

c++ - Qt 的 MinGW、Code::Blocks 的 MinGW 和 MinGW 本身有什么区别吗?

windows - 使用 NativeActivity 制作 Android NDK 应用程序?