사용 된 컴파일러를 찾는 방법 : G77 또는 Gfortran
문제
여러 라이브러리에 따라 개인 프로젝트를 위해 라이브러리를 편집하고 있습니다. 특히 종속성 중 하나는 Fortran과 함께 컴파일됩니다. 어떤 경우에는 의존성이 g77
, 다른 사람들에게 나는 그것을 편집 한 것을 보았습니다 gfortran
. 내 프로젝트는 그렇습니다 ./configure
'D와 연결됩니다 -lg2c
또는 -lgfortran
, 그러나 지금까지 나는 그것을 손으로하고 있습니다.
가능하다면, 의존적 라이브러리를 살펴보면 어떻게 알 수 있습니까 (예 : nm
또는 다른 유틸리티?), 중고 컴파일러가 g77
(그리고 나서 나는 내가 사용할 것이다 -lg2c
내 링크 옵션에서) 또는 gfortran
(그리고 나서 나는 내가 사용할 것이다 -lgfortran
)?
미리 감사드립니다!
해결책
nm filename | fgrep ' __g77'
한편 G77이 사용 된 경우 결과를 제공 할 것입니다
nm filename | fgrep '@@GFORTRAN'
Gfortran을 사용하면 결과가 제공됩니다.
다른 팁
당신은 nm filename
, 이는 G77 또는 Gfortran이 사용되었는지 여부를 나타냅니다. 대부분의 경우 라이브러리가 한 곳에서 최소한 입력 출력을하는 경우 libg2c 또는 libgfortran을 호출하면 기호가 표시됩니다. G77
그 안에, 또는 Gfortran
. 따라서 가장 좋은 방법은 Grep을 사용하는 것입니다.
nm filename | grep _g77_
nm filename | grep _gfortran_
두 메모 :
- 그레핑
@@GFORTRAN
Geocar가 제안한 것처럼 신뢰할 수 없으므로 : Linux 또는 Mac OS가 아닌 예를 들어 Linux가 포함 된 라이브러리 버전이 지원되는 플랫폼에서만 작동합니다. - 일부 컴파일 된 코드는 여전히 지원 라이브러리 기능을 전혀 호출하지 않을 수 있습니다 (단순한 산술이지만 입력 출력이없는 경우). 이 경우 디버깅 옵션으로 컴파일되지 않는 한 어떤 컴파일러 출력을 알 수 없습니다.
NM을 사용하고 컴파일 된 코드가 하나 또는 다른 기능에서 함수를 사용하는지 확인하여 파악할 수 있지만 이는 꽤 해킹입니다. 사용 가능한 라이브러리를 기반으로 파악할 수 있습니다 (LIBG2C가없는 경우 G77이 아니 었습니다). 의존성을 직접 구축 할 수 있다면, 빌드 프로세스의 한 부분이 다른 부분 (변수, 파일 등)을 사용하여 사용한 것을 사용할 수 있습니다.