3
这期间与某些库链接时,挂就是我的小例子:函数调用停止/含写语句时,但只编译
program test
implicit none
real :: testfunc
write(*,*) "Writing from main"
write(*,*) testfunc()
end program test
function testfunc() result(y)
real :: y
write(*,*) "Write from function g"
y=1.0
return
end function testfunc
当用一个简单的
gfortran test.f90
或编译当包括像Slatec的图书馆
gfortran test.f90 -lslatec
它工作正常。
但是,将库更改为-lblas的-llapack时,在调用testfunc()时程序在运行时挂起 。请注意,我的示例代码实际上并未使用任何这些库。我看到的最后一件事是“从主写入”,然后什么也没有发生,我必须CTRL-C重新获得控制权。挂起时,该过程似乎没有使用任何CPU周期。
现在很奇怪的是,如果我注释掉testfunc()中的write语句,它就会一直运行。
所以我的问题是:这些库真的能阻止我在自己的函数内打印吗?为什么?怎么样?
(实际上,我的工作信息在需要LAPACK和BLAS一个更大的计划,所以我显然不能仅仅停留链接到他们。)
你在做什么叫做递归I/O(执行一个I/O语句,而另一个正在执行)。我不确定标准是否允许使用这种格式,但我相信gfortran会允许它(请参阅gfortran邮件列表上的这个讨论:http://gcc.gnu.org/ml/fortran/2008-04/ msg00170.html)。你使用什么版本的gfortran? – eriktous