2017-12-18 331 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

相关问题