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

Esk*_*kil 4 fortran fortran90

这是我的最小例子:

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的大型程序,所以我显然不能只是停止链接它们.)

Fra*_*acq 7

据我所知,它不符合递归调用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)

从我的角度来看,你遇到的麻烦因此与使用过的库无关,但在这种情况下错误的症状可能会改变(从明显没有错误到崩溃).