情况很简单,但却很奇怪。当我在没有 LinearAlgebra.o 源代码(需要链接到 LAPACK)的情况下编译程序时,会捕获并处理 C++ 异常。当我不包含该编译单元但仍然链接到库时(-llapack -lblas
),捕获并处理异常。但是一旦我把它放在那里(其中的代码运行得很好),C++异常就不再被正确处理,并且我得到Windows崩溃处理程序“程序已停止响应返回总部的报告”的废话。
Here https://stackoverflow.com/questions/8640351/lapack-on-win32我阐明了这个源文件中发生的事情。我确实把它做得很简单,但我不确定它是否真的是犹太洁食。
我怀疑是因为调用 FORTRAN 例程导致 C++ 异常停止工作。但我不知道如何解决这个问题。
UPDATE:
我很高兴找到这个问题的临时解决方法:我正在使用 MinGW 的gfortran
编译器直接编译我当前使用的 LAPACK 和 BLAS 例程。
使用以下命令将这些目标文件链接到我的 C++ 项目中-lgfortran
with g++
工作完美,并且我的异常仍然得到正确处理!作为奖励,这允许我只包含我打算使用的 LAPACK 例程,所以现在我不再需要链接 ~4MB 的库。
编辑:我认为如果我静态链接一个库,它只会“获取它需要的内容”,因此在这种情况下,4MB 并不重要。
我使用 GotoBLAS2 取得了很好的成果。运行包含的脚本会生成一个针对我的机器优化的巨大的 19MB 静态库。只需将其连接即可完美运行。我所有的 Fortran 风格调用都可以正常工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)