これが私の最小限の例です:
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() 内の書き込みステートメントをコメントアウトすると、常に機能します。
だから私の質問は本当に: これらのライブラリは本当に自分の関数内での印刷を防ぐことができますか? なんで?どのように?
(私は実際に、lapack と blas を必要とするより大きなプログラムに取り組んでいるので、それらへのリンクをやめることはできません。)