8

Fortran 90 모듈은 사라지는 생물입니다. 필자는 잠시 동안 (비주얼 포트란과 비주얼 스튜디오 2010을 사용하여 컴파일하면서) 성공한 (단수) 모듈을 사용하고있었습니다. 그럼 난 다른 모듈을 작성하고이 오류를 받기 전에, 다른 함수에서 사용하려고 : Fortran 90 모듈의 신비한 특성

error #7002: Error in opening the compiled module file. Check INCLUDE paths. 

그래서 내가 잘못된 모듈을 삭제. 하지만 이제는 원래 모듈에 액세스하려고 할 때도 같은 오류가 발생합니다!

어떻게 이러한 신비한 생물을 찾을 수 있습니까? 왜 하나의 모듈은 2 개가 아닌 하나의 모듈을 작동합니까? 나는 그들을 삭제하고 다시 컴파일하거나 컴파일러에게 어떻게 든 그들을 포함 할 것을 요구한다고 가정하고있다. 나는 소스 코드의 파일 위치를 알고 있지만으로 컴파일 된 곳은 이 아닙니다.

답변

27
특정 프로세서 (많은 포트란 프로세서들은 유사한 특성을 가지고 있지만 세부 다를) 용

: 모듈이 성공적으로 컴파일되면

  • 은, 컴파일러가 .MOD 파일을 생성한다 (그리고 아마도 .OBJ 파일)은 모듈이 제공하는 엔티티에 대한 정보를 포함합니다. 인용 한 오류 메시지가 참조하는 것이이 mod 파일입니다. 컴파일러는 다른 소스를 컴파일하는 동안 모듈에 대한 USE 문을 발견하면이 mod 파일을 필요로합니다. obj 파일은 링크 단계에서 사용됩니다.

  • 따라서 모듈이 USE되기 전에 컴파일러는 모듈의 소스 코드를 컴파일해야합니다. 즉, 모듈의 소스 코드 (MODULE ... END MODULE)는 USE 문보다 먼저 소스 파일에 나타나거나 USE 문으로 소스 파일보다 먼저 컴파일 된 개별 파일에 있어야합니다.

  • Visual Studio에서 인텔 포트란 프로젝트를 사용하여 컴파일 할 때 빌드 환경은 자동으로 프로젝트 내의 소스 파일에 적절한 컴파일 순서를 정렬하려고 시도합니다. 명령 행에서 ifort 명령을 사용하여 컴파일 할 때 프로그래머는 컴파일 순서를 관리해야합니다.

  • 생성 된 mod 파일을받는 디렉토리는 컴파일러에 지정된 첫 번째/모듈 명령 줄 옵션으로 지정됩니다. Visual Studio에서이 옵션은 포트란> 출력 파일> 모듈 경로 속성을 사용하여 설정됩니다. 기본적으로 Visual Studio의 Fortran 프로젝트에는이 속성이 현재 구성의 이름으로 설정되어 있으므로 Mod 파일은 Debug 또는 Release라는 하위 프로젝트 디렉터리에 나타납니다./module 명령 행 옵션이 없으면 mod 파일이 현재 디렉토리에 나타납니다.

  • /module 명령 줄 옵션 (또는 이와 동등한 Visual Studio 속성)으로 지정된 디렉터리는 mod 파일 검색에도 사용됩니다. 또한/I 명령 줄 옵션 (Visual Studio의 경우 Fortran> 일반> 추가 포함 디렉터리)에 지정된 디렉터리가 검색됩니다.

그것은 당신은 단지 다음 하나의 프로젝트를 처리하는 경우는 하나의 비주얼 스튜디오 프로젝트 또는 여러 프로젝트 등이 있는지, 같은 당신이 당신의 소스 파일 사이에 당신의 모듈을 배포 한 방법에 질문에서 명확하지 않다 일반적으로 모든 포트란 파일을 프로젝트의 소스 파일에 추가하면 기본 설정이 "작동"해야합니다.

  • 모듈에 대한 관련 소스 프로젝트의 소스 파일 중 하나가 아닌, 다음과 같은 이유로 모드 파일을 찾는 오류가있을 수 있습니다 다른 이유로 실패 모듈에 대한 소스의

  • 컴파일 (이전 빌드 순서에 나와 다른 오류입니까?) 모듈이 특정 소스 파일에서의 사용 후 정의

  • ; - (이것은 언어의 규칙에 의해 허용되지 않은 모듈 A가 사용 또는 유사한 모듈 B를 사용)

  • 모듈 간의 순환 종속성이 존재

  • 빌드 순서의 자동 결정을 혼란스럽게하는 일부 소스 구조 (빌드 시스템의 이전 버전은 F2003 형식의 use 문과 이중 콜론으로 혼동되었으며 USE 문을 난독 화하여 빌드 시스템 그 (것)들을 확인하는 것을 무시한다) 그러나이 양상은 아주 애매하다. Visual Studio에서 여러 포트란 프로젝트

은 프로젝트 종속성 트리에서 이전 프로젝트에서 컴파일 모드 파일을 찾을 수 있도록, 의존 프로젝트에 모듈 검색 디렉토리를 수정할 필요가있을 수 있습니다. Visual Studio의 프로젝트 간 종속성 설정이 올바른 경우 최신 버전의 Intel Fortran도 자동으로이 특성을 처리합니다. 아주 막연한 질문에

+4

+1 우수하고 상세한 대답. – Chris

+0

훌륭한 답을 보내 주셔서 감사합니다. Visual Studio 환경에서 모듈이 작동하는 방식에 대해 많은 정보를 제공했습니다. 당신에게 감사드립니다. 이제 여러 모듈이 실수없이 작동합니다! 그 설명을 쓸 시간을 내 주셔서 정말 고맙습니다. – frostbyyte

관련 문제