2008-11-19 5 views
7

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

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

Заранее благодарен!

ответ

6
nm filename | fgrep ' __g77' 

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

nm filename | fgrep '@@GFORTRAN' 

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

1

Возможно, вы сможете понять это с помощью nm и посмотреть, использует ли скомпилированный код функции от одного или другого, но это довольно взломанный. Возможно, вам удастся выяснить, на основе какой библиотеки (если libg2c не доступен, тогда это не g77, например), но тогда у вас все еще есть некоторая двусмысленность, если они доступны. Если вы можете самостоятельно построить зависимость, то вы можете использовать одну часть своего процесса сборки, чтобы каким-то образом указать другую часть (переменную, файл и т. Д.), Какую вы использовали.

3

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

nm filename | grep _g77_ 
nm filename | grep _gfortran_ 

две ноты:

  1. оглавлению для @@GFORTRAN как geocar предложил не надежен: он будет работать только на платформах, где библиотека-версий поддерживается, который включает, например, Linux, но не Windows или Mac OS.
  2. По-прежнему возможно, что некоторый скомпилированный код абсолютно не поддерживает библиотечную функцию поддержки (если все, что она делает, является простой арифметикой и не имеет ввода-вывода, например). В этом случае, если он не скомпилирован с параметрами отладки, невозможно определить, какой компилятор выводит его.
Смежные вопросы