这是我的最小例子:
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
Run Code Online (Sandbox Code Playgroud)
用简单的编译时
gfortran test.f90
Run Code Online (Sandbox Code Playgroud)
或者包括像Slatec这样的图书馆
gfortran test.f90 -lslatec
Run Code Online (Sandbox Code Playgroud)
它工作正常.
但是,当将库更改为-lback的-llapack时,程序在调用testfunc()时会在运行时挂起.请注意,我的示例代码实际上并不使用任何这些库.我看到的最后一件事是"从主要写作",然后没有任何反应,我必须按CTRL-C重新获得控制权.挂起时,该过程似乎没有使用任何CPU周期.
现在奇怪的是,如果我在testfunc()中注释掉write语句,它会一直有效.
所以我的问题是:这些库真的可以阻止我在我自己的函数中打印吗?为什么?怎么样?
(我实际上正在开发一个需要lapack和blas的大型程序,所以我显然不能只是停止链接它们.)
据我所知,它不符合递归调用WRITE关键字的标准.
要纠正您的程序,请稍微修改您的主程序
program test
implicit none
real :: testfunc,result
write(*,*) "Writing from main"
result=testfunc()
write(*,*) result
end program test
Run Code Online (Sandbox Code Playgroud)
从我的角度来看,你遇到的麻烦因此与使用过的库无关,但在这种情况下错误的症状可能会改变(从明显没有错误到崩溃).
| 归档时间: |
|
| 查看次数: |
1340 次 |
| 最近记录: |