gpt4 book ai didi

fortran - 包含写语句时的函数调用停止/挂起,但仅在编译期间与某些库链接时

转载 作者:行者123 更新时间:2023-12-05 00:02:41 26 4
gpt4 key购买 nike

这是我的最小示例:

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 的更大的程序,所以我显然不能停止链接到它们。)

最佳答案

据我所知,递归调用 WRITE 关键字不是符合标准的。

要更正您的程序,请稍微修改您的主程序

program test    
implicit none
real :: testfunc,result
write(*,*) "Writing from main"
result=testfunc()
write(*,*) result
end program test

从我的角度来看,您遇到的问题与使用的库无关,但在这种情况下错误的症状可能会改变(从显然没有错误到崩溃)。

关于fortran - 包含写语句时的函数调用停止/挂起,但仅在编译期间与某些库链接时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7646278/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com