call_external 질문 드립니다.

게시판 IDL Q&A call_external 질문 드립니다.

3 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #2613 Reply
      tlseorb0111
      회원

      call_exterl 함수를 이용해 윈도우에서 fortran 프로그램을 불러다 쓰고 있습니다.
      idl 8.5, window 8.1

      일단 포트란 프로그램을 컴파일 시키구요. 컴파일러는 cygwin을 깔아서 사용합니다.
      gfortran -c test.f
      gfortran -shared -o test.dll test.o

      output으로 나온 dll 파일을 다음 idl 명령어를 사용해 불러다 씁니다.

      res = 1l
      null = call_external(‘D:\IDL_Working\123\test.dll’, ‘test_’, res, /f_value)
      print, res
      이 작업을 idl commandline창을 열어 실행시키면 아무 문제가 없는데
      idlde로 실행 시킨후 .full_reset을 하면 idlde 창이 꺼져버립니다. 그리곤 “hs_err_pid4728.txt” 파일이 생성되는데요. idlde의 문제인것 같은데 해결 방법이 있는지요?
      사용한 포트란 프로그램은 아래와 같습니다.

      REAL*4 FUNCTION TEST(argc, argv)
      INTEGER*4 argc, argv(*)
      j = loc(argc)
      CALL TEST1(%VAL(argv(1)))
      RETURN
      END

      SUBROUTINE TEST1(INPUT)
      INTEGER*4 INPUT
      INPUT = 123
      END

    • #2615 Reply
      Sangwoo
      회원

      문제가 발생하는 원인은 정확히는 모르겠습니다. 다만 올려주신 포트란 프로그램을 저같은 경우는 .f90 확장자 파일로 저장했습니다. 이 파일을 gfortran으로 컴파일을 해서 생성된 dll 파일을 사용하여 똑같은 방식으로 IDLDE상에서 실행한 후 .fulll_reset을 해봤는데 별다른 문제가 발생하지 않더군요. 제 경우는 윈10에서 IDL 8.5로 테스트했습니다. 아마도 윈10과 8.1 사이의 차이로 인한 부분은 아닐 것 같으므로, 포트란 프로그램이 77용이냐 90용이냐의 차이가 아닐까 추측만 해봅니다. 그래서 정확한 해결책은 아닐지 모르겠지만, 포트란 90용 프로그램으로 저장한 후 테스트해보면 어떨까 합니다.

    • #2617 Reply
      tlseorb0111
      회원

      답변 감사합니다.

      f90으로 바꿔서 해봐도 같은 증상이 발생합니다.

      컴파일러를 cygwin에서 mingw64로 바꿔서하니 문제가 해결 됐습니다.

      cygwin문제인것 같은데 자세한 것은 잘 모르겠네요…..

      • 이 답변은 tlseorb0111에 의해 8 years, 5 months 전에 수정됐습니다.
    • #2619 Reply
      Sangwoo
      회원

      사실 이게 IDL이 포트란을 호출한다는 개념에 가깝기 때문에, 핵심은 결국 포트란 컴파일러입니다. 즉, 포트란 컴파일러의 특성에 따라갈 수 밖에 없습니다. 하지만 컴파일러별로 특성이 조금씩 다르기 때문에, 지금과 같이 어떤 컴파일러에서는 안되고 어디선 되고 하는 문제의 근본 원인을 찾기는 쉽지 않은 것 같습니다. 조금 귀찮아도 trial & error가 어쩔 수 없이 필요한 경우가 아닌가 싶습니다. 저 역시 mingw64 기반의 컴파일러를 사용중입니다. 하여간 해결되어서 다행이네요.

      • 이 답변은 Sangwoo에 의해 8 years, 5 months 전에 수정됐습니다.
3 답변 글타래를 보이고 있습니다
'call_external 질문 드립니다.'에 답변달기
글쓴이 정보: