2011-12-27 33 views
2

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

Here我阐明这是什么源文件内部发生的光。我确实保持它非常简单,但我不确定它是否真的是犹太洁食。

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

UPDATE:

我很高兴找到了针对此问题的临时解决方法:我使用的MinGW的gfortran编译器直接编译我目前使用的LAPACK和BLAS例程。

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

编辑:我想如果我静态链接它只是“抓住它所需要的”一库所以它是4MB不会在这种情况下,无所谓。

+1

通常,fortran代码应该使用'gfortran'前端进行编译。它将适当的标志添加到使用'gcc'的编译器中,而语言自动发现功能不会。您可以使用verbose选项'-v'检查编译时使用的确切参数。 – rodrigo 2011-12-27 21:19:19

回答

0

我曾与GotoBLAS2很大的成绩。运行包含的脚本会生成一个大型的19MB静态库,可以为我的机器进行优化它通过简单地链接它完美地工作。我所有的fortran风格调用都适用。