문제

여러 라이브러리에 따라 개인 프로젝트를 위해 라이브러리를 편집하고 있습니다. 특히 종속성 중 하나는 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_

두 메모 :

  1. 그레핑 @@GFORTRAN Geocar가 제안한 것처럼 신뢰할 수 없으므로 : Linux 또는 Mac OS가 아닌 예를 들어 Linux가 포함 된 라이브러리 버전이 지원되는 플랫폼에서만 작동합니다.
  2. 일부 컴파일 된 코드는 여전히 지원 라이브러리 기능을 전혀 호출하지 않을 수 있습니다 (단순한 산술이지만 입력 출력이없는 경우). 이 경우 디버깅 옵션으로 컴파일되지 않는 한 어떤 컴파일러 출력을 알 수 없습니다.

NM을 사용하고 컴파일 된 코드가 하나 또는 다른 기능에서 함수를 사용하는지 확인하여 파악할 수 있지만 이는 꽤 해킹입니다. 사용 가능한 라이브러리를 기반으로 파악할 수 있습니다 (LIBG2C가없는 경우 G77이 아니 었습니다). 의존성을 직접 구축 할 수 있다면, 빌드 프로세스의 한 부분이 다른 부분 (변수, 파일 등)을 사용하여 사용한 것을 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top