我試圖編譯一個使用gfortran
的Fortran應用程序,它與Intel MKL庫鏈接。gfortran即使使用`-dec-math`也給出`dacosd_`的未定義引用
未定義的參考`dacosd_」
有一個acos
或acosd
(以度反餘弦),我幾乎沒有,但我不能編譯使用-fall-intrinsics
或-dec-math
標誌,按照指示在手冊中,因爲它們都會產生相同的錯誤。
我在哪裏弄錯了,我該如何編譯?
我使用的gfortran
版本是5.4.1。
我試圖編譯一個使用gfortran
的Fortran應用程序,它與Intel MKL庫鏈接。gfortran即使使用`-dec-math`也給出`dacosd_`的未定義引用
未定義的參考`dacosd_」
有一個acos
或acosd
(以度反餘弦),我幾乎沒有,但我不能編譯使用-fall-intrinsics
或-dec-math
標誌,按照指示在手冊中,因爲它們都會產生相同的錯誤。
我在哪裏弄錯了,我該如何編譯?
我使用的gfortran
版本是5.4.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
功能這種方式,留便攜。
omg它真的有效!我在Ubuntu上安裝'gfortran-7'(出於某些原因,默認'gfortran'版本低至5.4.0,因此您必須手動更新/升級它)。在那裏獲得一個「內在」真的幫助我解決問題!非常感謝,祝你節日快樂! – kensaii
我不認爲acosd和朋友可用於舊版本的編譯器。檢查該特定版本的文檔。無論如何,我會避開它,因爲它不是標準的。只需定義一個參數等於'180.0/pi',無論你喜歡和相乘的精度如何。 – RussF
你還在使用'-std = 2008'嗎?說**完整**命令很重要!如果以後沒有人發現它,我會在後面尋找答案,但請注意手冊中的內容:*「此函數僅用於兼容性,應儘可能避免使用標準結構。」*您可以使用'acos ()'並按照RussF的說法轉換參數。他也許是對的,你需要一個更新的版本。 –
順便說一句,我相信它是'-fdec-math',而不是'-dec-math'。 –