2014-09-12 2 views
-1

이 질문을 읽었습니다 : How do you USE Fortran 90 module data 그러나 문제를 해결할 수 없습니다.Fortran에서 모듈 선언을 사용할 때 연결 오류가 발생했습니다

다른 모듈에서 선언 한 변수를 사용하려고하면 LNK2019 : 확인할 수없는 외부 기호가 나타납니다.

배경 정보 : 저는 Fortran의 초보자이며 다른 누군가가 만든 프로젝트에서 일하고 있습니다. 인텔 포트란 작곡가와 비주얼 스튜디오를 사용하고 있습니다. 내가 공개 및 개인 모듈 데이터의 사용을 제대로 이해하는지 확실하지 않습니다.

문제는 다른 모듈에서 변수 BodySystem을 사용하려고 할 때마다 작동하지 않으며 해결되지 않은 외부 기호가 있다는 오류가 발생합니다.

공개 및 비공개 부분을 잘못 사용하고 있습니까? 아니면 다른 것을 놓치고 있습니까? 그래도 문제가 아니었다 때문에, 코드 삭제 :

편집 : 나는 컴파일 가능한 코드 조각

Edit2가에 코드를 변경했습니다. IanH는 객체 파일이 유효 기간이 경과함에 따라 올바른 답을주었습니다.

내가 얻을 정확한 오류 메시지는 다음과 같습니다

오류 2 치명적인 오류 LNK1120 : 1 개 확인되지 않은 외부 디버그 \ HmSlam.exe
오류 1 오류 LNK2019 : 함수에서 참조되지 않은 외부 기호 _COORDINATESSYSTEM_M_mp_BODYSYSTEM _MAIN__ HmSlam.obj

여기서 HmSlam은 주 프로그램이며 coordinatessystem_m은 변수 bodysystem이 선언 된 모듈입니다.

+1

문제를 설명하기에 충분하지만 크기는 커질 수있는 편집 가능한 스 니펫을 게시 할 수 있습니까? 정확한 오류 메시지를 게시 할 수 있습니까? 가상 코드를 고치려고 할 때의 문제는 수정 코드가 응답을 생성하는 경향이 있다는 것입니다. * 예, 실제 코드에 문제가있는 경우에만 의사 코드로 게시했습니다. * –

+2

여전히 '잘못된 코드'를 게시하고있는 것으로 의심됩니다. 필자는 모듈에있는 'public'지정자를 모듈에 넣는 것이 정확하다고 생각하지 않습니다. 'private' 지정자 다음에 줄을 써보십시오. 또한,'contains' 문은 선행하는 것이 아니라'end type'을 따라야한다고 생각합니다. –

+0

나는 그것을 다시 편집했는데, 나는 그것이 무엇이며 무엇이 중요하지 않은지를 결정하는 것이 약간 어렵다는 것을 알았다. 이제 서브 루틴 초기화 예제를 서브 루틴의 예제로 포함 시켰습니다. (이것은 내가 신체 시스템을 호출 할 수 있다면 가장 먼저해야 할 일입니다.) – BarendB

답변

0

링커 오류 메시지가 누락 된 심볼의 "맹 글링은"그렇지 않으면 모듈 이름을 난도질 할 수 있었다와하지 않았을의 컴파일러이 이름 BODYSYSTEM 모듈 COORDINATESSYSTEM_M에서 오는 것을 알고 있음을 알려줍니다 기호 이름을 함께 사용합니다 (컴파일러는 다른 이름 규칙을 사용합니다).

그러면 코드 컴파일로 문제가 발생하지 않는다는 것을 알 수 있습니다. 연결 단계에서 문제가 발생했습니다.

링커에 오래된 개체 파일을 제공하고 있거나 관련 개체 파일을 전혀 제공하지 않는 것으로 의심됩니다. 우리가 여기있는 동안

는 (:

  • 형 바인딩 절차의 사용은이 포트란 90 없다는 것을 의미 - 그것은 적어도 포트란 2003에 오신 것을 환영에서 21 세기이다

  • . 귀하는 귀하의 출처에 대한 비공개적이고 공개적인 "부분"을 가지고 있지 않습니다 - 귀하는 비공개 및 공개 성명서를 가지고 있습니다. 진술서에있는 PRIVATE 키워드 자체는 모듈의 기본 접근성이 비공개임을 나타냅니다. 즉, 기본적으로 모듈에서 정의되거나 선언 된 모듈은 모듈이인 곳에서 사용할 수 없습니다.'d. 이러한 비공개 성명이 없으면 모듈의 기본값은 공개입니다. PUBLIC 키워드 뒤에 식별자 목록이 오는 경우 해당 식별자가 공용임을 지정합니다 (private로 설정된 기본값과는 반대).사설 및 공개 진술의 일반적 위치 및 수는 사용 및 암시 적 진술 후에 모듈의 명세 부분에 나타나는 한 중요하지 않습니다.

  • USE 문의 ONLY 지정자에 식별자를 지정해도 아무 것도 "호출하지"않습니다. "이 기호 만이 지정자에 나열된 다른 항목과 함께이 모듈에서 사용할 수 있습니다. 다음 범위 ".

+0

오브젝트 파일이 실제로 오래되어 컴파일이 순조롭게 진행됩니다. 고맙습니다! – BarendB

관련 문제