gfortran即使使用`-dec-math`也给出`dacosd_`的未定义引用
问题描述:
我试图编译一个使用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
功能这种方式,留便携。
+0
omg它真的有效!我在Ubuntu上安装'gfortran-7'(出于某些原因,默认'gfortran'版本低至5.4.0,因此您必须手动更新/升级它)。在那里获得一个“内在”真的帮助我解决问题!非常感谢,祝你节日快乐! – kensaii
我不认为acosd和朋友可用于旧版本的编译器。检查该特定版本的文档。无论如何,我会避开它,因为它不是标准的。只需定义一个参数等于'180.0/pi',无论你喜欢和相乘的精度如何。 – RussF
你还在使用'-std = 2008'吗?说**完整**命令很重要!如果以后没有人发现它,我会在后面寻找答案,但请注意手册中的内容:*“此函数仅用于兼容性,应尽可能避免使用标准结构。”*您可以使用'acos ()'并按照RussF的说法转换参数。他也许是对的,你需要一个更新的版本。 –
顺便说一句,我相信它是'-fdec-math',而不是'-dec-math'。 –