2017-12-18 23 views
2

gfortranを使用してFortranアプリケーションをコンパイルしようとしています。インテルMKLライブラリとリンクしています。gfortranは `-dec-math`でも` dacosd_`に未定義の参照を与えます

`dacosd_」

acosまたはacosd(程度の逆余弦)がありますが、私はほとんどそこだが、指示されたとおり、私は、-fall-intrinsicsまたは-dec-mathフラグを使用してコンパイルすることはできませんへの未定義参照このマニュアルでは、すべて同じエラーが発生するためです。

どこが間違っていますか?これをどのようにコンパイルできますか?

私が使用しているgfortranのバージョンは5.4.1です。

+1

私は、古いバージョンのコンパイラではacosdと友人が利用できないと思います。特定のリリースのドキュメントを確認してください。私はそれが標準ではないので、とにかくそれをはっきりと操縦したいと思う。どのような精度でも好きなように '180.0/pi'に等しいパラメータを定義して乗算するだけです。 – RussF

+1

あなたはまだ '-std = 2008'を使用していますか? ** complete **コマンドを言うことが重要です! *この関数は互換性のみを目的としたものであり、可能な限り標準的な構文に賛成しないようにする必要があります。* 'acos () 'と引数をRussFが言うように変換します。彼はあなたが新しいバージョンを必要とするのも正しいかもしれません。 –

+1

ところで、私は '-dec-math'ではなく' -fdec-math'だと信じています。 –

答えて

1

RussFがコメントしたように、これらの非標準拡張関数はgfortran 7以降に含まれています。新しいバージョンが必要です。また、正しいフラグは-dec-mathではなく-fdec-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

それは本当に働いた!私は 'gfortran-7'をubuntuにインストールします(いくつかの理由で、デフォルトの' gfortran'のバージョンは5.4.0と低いので、手動で更新/アップグレードする必要があります)。本当に私が問題を解決するのに役立ちます。ありがとう、幸せな休日! – kensaii