2

좋아요, 저는 Linux HPC에서 대규모 오픈 소스 프로그램을위한 소스 코드를 가지고 있습니다. 파일 시스템을 공유하는 HPC, arc1 및 arc2를 구성하는 두 개의 별개 시스템이 있습니다. 본질적으로, 나는 두 개의 시스템이 서로 다른 라이브러리와 컴파일러 버전 등을 가지고 있기 때문에이 프로그램의 두 가지 개별 컴파일 버전이 필요하다. 그러나 같은 소스 코드에서 두 버전을 모두 컴파일 할 수 있기를 바란다.gfortran으로 컴파일 된 프로그램, ifort로 재 컴파일하는 방법?

내가 겪고있는 문제는 특정 컴파일러로 코드를 한 번 컴파일하면 특정 컴파일러에 "잠겨"있는 것처럼 보입니다. 나는 이후 심지어 같은 시스템에서 다른 컴파일러로 다시 컴파일 할 때, 그것은 나에게 양식의 많은 오류를 제공합니다 : ****

[file.o]:[line]: undefined reference to '_gfortran_****' 

다수의 다른 내장 포트란 기능. 나는 컴파일러가 실제로 어떻게 작동하는지 거의 안다는 것을 인정해야한다. 그래서 나는 이것을 설명하기가 어렵다.

그래서, 내 질문은 두 가지 질문에 종기 :

1) gfortran 버전 사이의 "정의되지 않은 참조"오류에 대한 빠른 수정이 있습니까? 코드는 처음에 gfortran 4.1.2로 arc1에서 컴파일되었고 gfortran 4.4.7을 사용하여 arc2에서 컴파일하려고합니다.

2) 그렇지 않다면 두 시스템에서 ifort로 다시 컴파일 할 수 있도록 코드를 "잠금 해제"할 수있는 방법이 있습니까? (두 시스템 모두 동일한 버전의 ifort가 설치되어 있기 때문에)? 어떤 시스템에서 ifort로 컴파일하려고 할 때 수천 개의 "정의되지 않은 참조"오류가 발생합니다.

+0

코드에서 사용하는 모든 라이브러리를 gfortran으로도 컴파일 하시겠습니까? –

+0

나는 그렇게 생각하지 않는다. 프로그램은 주로 Fortran이지만, 그래픽 비트와 봅은 C++에 있다고 생각한다. 설치 스크립트는 동의어 버전의 Fortran 및 C++ 컴파일러를 사용하도록 제한됩니다. – user3393587

+0

gfortran에 의해 컴파일 된 어떤 오브젝트 파일이 링크되어 있습니다. 링커는 대개 파일의 이름을 인쇄합니다. 나는 이것이'file.o '라고 믿는다. –

답변

2

의견의 합계. 링커는 명확하게 gfortran에 의해 컴파일 된 file.o이라는 오브젝트 파일을 수신하고 gfortran 런타임 라이브러리에서 심볼을 찾을 수있는 위치를 알지 못합니다. 빌드 스크립트가이 파일을 새 컴파일러로 다시 컴파일하지 않았습니다. 솔루션은 특정 빌드 시스템의 설비를 사용하는 것입니다. make clean, 이전 빌드에서 생성 된 모든 파일을 삭제합니다.

일부 빌드 스크립트가 무시하는 경향이있는 .mod 파일에도 문제가있을 수 있습니다.

관련 문제