Как узнать, какой компилятор использовался: g77 или gfortran

StackOverflow https://stackoverflow.com/questions/302171

  •  08-07-2019
  •  | 
  •  

Вопрос

Я собираю библиотеку для частного проекта, который зависит от ряда библиотек. В частности, одна из зависимостей скомпилирована с Fortran. В некоторых случаях я видел зависимость, скомпилированную с помощью g77 , а в других я видел ее скомпилированную с помощью gfortran . Мой проект тогда ./ configure d для связи с -lg2c или -lgfortran , но до сих пор я делал это рука.

Если это возможно, как я могу узнать, просматривая зависимую библиотеку (например, через nm или другую утилиту?), был ли используемый компилятор g77 (а затем я буду использовать -lg2c в настройках ссылок) или gfortran (а затем я буду использовать -lgfortran )?

Заранее спасибо!

Это было полезно?

Решение

nm filename | fgrep ' __g77'

даст результаты, если g77 использовался, между тем

nm filename | fgrep '@@GFORTRAN'

даст результаты, если использовать gfortran.

Другие советы

Вам нужно что-то grep в выводе nm filename , который указывает, использовался ли g77 или gfortran. В большинстве случаев, если библиотека выполняет как минимум ввод-вывод в одном месте, она вызовет libg2c или libgfortran, и вы заметите символ с g77 или < код> gfortran . Поэтому лучше всего использовать grep:

nm filename | grep _g77_
nm filename | grep _gfortran_

Две заметки:

<Ол>
  • Поиск для @@ GFORTRAN , как предложил geocar, ненадежен: он будет работать только на платформах, где поддерживается версионность библиотек, включая, например, Linux, но не Windows или Mac OS.
  • Все еще возможно, что некоторый скомпилированный код не вызывает абсолютно никакой функции библиотеки поддержки (если все, что он делает, является простой арифметикой и не имеет ввода-вывода, например). В этом случае, если он не скомпилирован с параметрами отладки, невозможно определить, какой компилятор выводит его.
  • Возможно, вам удастся выяснить это с помощью nm и посмотреть, использует ли скомпилированный код функции из тех или иных функций, но это довольно подло. Возможно, вам удастся выяснить это, основываясь на том, какая библиотека доступна (если нет доступной libg2c, то, к примеру, это не был g77), но тогда у вас все еще есть некоторая неопределенность, если обе доступны. Если вы можете построить зависимость самостоятельно, то можете использовать, чтобы одна часть вашего процесса сборки как-то сообщала другой части (переменная, файл и т. Д.), Какую вы использовали.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top