좋아요, 저는 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로 컴파일하려고 할 때 수천 개의 "정의되지 않은 참조"오류가 발생합니다.
코드에서 사용하는 모든 라이브러리를 gfortran으로도 컴파일 하시겠습니까? –
나는 그렇게 생각하지 않는다. 프로그램은 주로 Fortran이지만, 그래픽 비트와 봅은 C++에 있다고 생각한다. 설치 스크립트는 동의어 버전의 Fortran 및 C++ 컴파일러를 사용하도록 제한됩니다. – user3393587
gfortran에 의해 컴파일 된 어떤 오브젝트 파일이 링크되어 있습니다. 링커는 대개 파일의 이름을 인쇄합니다. 나는 이것이'file.o '라고 믿는다. –