3
這期間與某些庫鏈接時,掛就是我的小例子:函數調用停止/含寫語句時,但只編譯
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一個更大的計劃,所以我顯然不能僅僅停留鏈接到他們。)
你在做什麼叫做遞歸I/O(執行一個I/O語句,而另一個正在執行)。我不確定標準是否允許使用這種格式,但我相信gfortran會允許它(請參閱gfortran郵件列表上的這個討論:http://gcc.gnu.org/ml/fortran/2008-04/ msg00170.html)。你使用什麼版本的gfortran? – eriktous