2017-12-18 29 views
2

gfortran을 사용하여 포트란 응용 프로그램을 컴파일하려고하는데, 인텔 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

BTW, 나는'-dec-math'가 아니라'-fdec-math'라고 생각합니다. –

답변

1

RussF가 주석을 달았으므로 이러한 비표준 확장 함수는 gfortran 7 이상에 포함되어 있습니다. 최신 버전이 필요합니다. 또한 올바른 플래그는 -dec-math이 아니라 -fdec-math입니다.

> 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 기능이 방법을 정의 할 수 있습니다

intrinsic dacosd 

print *, dacosd(0.5d0) 
end 

는 다음과 같이 컴파일합니다.

+0

그게 정말 효과가 있어요! 우분투에'gfortran-7'을 설치합니다. (어떤 이유에서 디폴트'gfortran' 버전은 5.4.0 정도로 낮기 때문에 수동으로 업데이트/업그레이드해야합니다). 거기에'intrinsic'을 얻으면 정말 문제를 해결하는 데 도움이됩니다! 고마워요, 즐거운 휴일! – kensaii