Here is my minimal example:
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
When compiling with a simple
gfortran test.f90
or when including a library like Slatec
gfortran test.f90 -lslatec
It works fine.
However, when changing the library to -llapack of -lblas, then the program hangs at runtime when calling testfunc(). Note that my example code here does not actually use any of these libraries. The last thing i see is "Writing from main", then nothing happens, and i have to CTRL-C to regain control. When hanging, the process does not appear to be using any CPU cycles.
The strange thing now is that, if i comment out the write statement inside testfunc(), it works all the time.
So my question is really: Can these libraries really prevent me from printing inside my own functions? Why? How?
(I'm actually working on a larger program which needs lapack and blas, so i obviously can't just stop linking to them.)
As far as I remember, it is not standard conforming to call recursively the WRITE keyword.
To correct you program, modify slightly your main program
program test
implicit none
real :: testfunc,result
write(*,*) "Writing from main"
result=testfunc()
write(*,*) result
end program test
From my point of new, the trouble you met has therefore nothing to do with the used libraries but the symptoms of the mistake may change in that case (from apparently no bug to a crash).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With