2017-12-18 297 views
2

我試圖編譯一個使用gfortran的Fortran應用程序,它與Intel MKL庫鏈接。gfortran即使使用`-dec-math`也給出`dacosd_`的未定義引用

未定義的參考`dacosd_」

有一個acosacosd(以度反餘弦),我幾乎沒有,但我不能編譯使用-fall-intrinsics-dec-math標誌,按照指示在手冊中,因爲它們都會產生相同的錯誤。

我在哪裏弄錯了,我該如何編譯?

我使用的gfortran版本是5.4.1。

+1

我不認爲acosd和朋友可用於舊版本的編譯器。檢查該特定版本的文檔。無論如何,我會避開它,因爲它不是標準的。只需定義一個參數等於'180.0/pi',無論你喜歡和相乘的精度如何。 – RussF

+1

你還在使用'-std = 2008'嗎?說**完整**命令很重要!如果以後沒有人發現它,我會在後面尋找答案,但請注意手冊中的內容:*「此函數僅用於兼容性,應儘可能避免使用標準結構。」*您可以使用'acos ()'並按照RussF的說法轉換參數。他也許是對的,你需要一個更新的版本。 –

+1

順便說一句,我相信它是'-fdec-math',而不是'-dec-math'。 –

回答

1

正如RussF所評論的,這些非標準擴展函數包含在gfortran 7和更高版本中。你需要一個更新的版本。此外,正確的標誌是-fdec-math,而不是-dec-math

intrinsic dacosd 

print *, dacosd(0.5d0) 
end 

編譯如下:

> gfortran-6 -fdec-math dacosd.f90 
gfortran-6: error: unrecognized command line option ‘-fdec-math’; did you mean ‘-ffast-math’? 
> gfortran-7 -fdec-math dacosd.f90 
> ./a.out 
    60.000000000000007  

您可以輕鬆地做同樣的計算與轉換

double precision, parameter :: pi = acos(-1.d0) 
print *, acos(0.5d0)*180/pi 
end 

,或者你可以定義自己的(d)acosd功能這種方式,留便攜。

+0

omg它真的有效!我在Ubuntu上安裝'gfortran-7'(出於某些原因,默認'gfortran'版本低至5.4.0,因此您必須手動更新/升級它)。在那裏獲得一個「內在」真的幫助我解決問題!非常感謝,祝你節日快樂! – kensaii

相關問題