Как узнать, какой компилятор использовался: g77 или gfortran
Вопрос
Я собираю библиотеку для частного проекта, который зависит от ряда библиотек. В частности, одна из зависимостей скомпилирована с 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), но тогда у вас все еще есть некоторая неопределенность, если обе доступны. Если вы можете построить зависимость самостоятельно, то можете использовать, чтобы одна часть вашего процесса сборки как-то сообщала другой части (переменная, файл и т. Д.), Какую вы использовали.