2013-09-03 2 views
1

저는 코코아 애플리케이션에서 fortran 서브 루틴을 호출합니다. 응용 프로그램이 성공을 구축하고 예상대로 작동하지만이 의미 론적 문제가있다 : *Objective-C에서 Fortran 서브 루틴 호출

"_increment"기능의

암시 적 선언은 C99에서 유효


Screen shot

increment.o는 컴파일 된 Fortran 서브 루틴입니다 (gfortran 컴파일러)

subroutine increment(n) 
    integer :: n 
    n=n+1 
end subroutine increment 

내가 뭘 잘못하고 있니? 도움 주셔서 감사합니다.

답변

2

함수의 유형을 선언해야합니다. 뭔가 같이 :

void increment_(int * i); 

(C에서,하지만 난 그게 같은 내가 올바른 서명을 추측하고 가정, 당신은 그 코드를 표시하지 않습니다).

나는 Fortran 서브 루틴을 bind(C) 또는 bind(C,name="increment")으로 권장하며 뒤에 _을 사용할 필요가 없습니다.

편집 : 도움이되지 않는 경우

subroutine increment(n) bind(C,name="increment") 
use iso_c_binding 
integer(c_int),intent(inout) :: n 
n = n+1 
end subroutine 

가하는 사용하려고 :

void increment(int * i); 

INT .f90 파일 다음하는 .m 파일에서이

시도 디버거를 사용하거나 loc(n)&i 또는 그 이상인 경우 서브 루틴에서 일부 디버깅 인쇄 문을 시도하십시오.

+0

답장을 보내 주셔서 감사합니다. 나는 void increment_ (int * i)를 시도했다; 그러나 서브 루틴은 증가하지 않습니다. 나는 bind (C)를 이해하지 못합니까? C가 무엇입니까? 바인딩이란 무엇입니까? – k4lls

+1

우리는 서브 루틴 코드를 보지 못합니다. 어떻게 증가하지 않는지 어떻게 알 수 있습니까? 어쨌든 나는 당신의 원래 문제가 해결되었다고 믿습니다. bind (C)는 http://gcc.gnu.org/onlinedocs/gfortran/Interoperability-with-C.html을 참조하십시오. –

+0

Hello Vladimir. 내 문제가 해결되지 않습니다. 나는 increment.o를 생성하는 데 사용한 increment.f90 코드를 지나쳤습니다. void increment_ (int * i)가 작동하지 않습니다. 감사. – k4lls

관련 문제