Comment savoir quel compilateur a été utilisé: g77 ou gfortran
Question
Je compile une bibliothèque pour un projet privé, qui dépend d'un certain nombre de bibliothèques. L'une des dépendances est compilée avec Fortran. Dans certains cas, la dépendance a été compilée avec g77
, dans d’autres, elle a été compilée avec gfortran
. Mon projet est alors ./ configure
'pour créer un lien avec -lg2c
ou -lgfortran
, mais je l'ai déjà fait jusqu'à présent. main.
Si cela est possible, comment puis-je savoir, en consultant la bibliothèque dépendante (via par exemple nm
ou un autre utilitaire?), si le compilateur utilisé était g77
(puis j'utiliserai -lg2c
dans les options de lien) ou gfortran
(et j'utiliserai -lgfortran
)?
Merci d'avance!
La solution
nm filename | fgrep ' __g77'
donnera des résultats si g77 a été utilisé,
nm filename | fgrep '@@GFORTRAN'
donnera des résultats si gfortran est utilisé.
Autres conseils
Vous devez rechercher quelque chose dans la sortie de nm nomfichier
, qui indique si g77 ou gfortran a été utilisé. Dans la plupart des cas, si la bibliothèque effectue au moins des entrées-sorties à un endroit, elle appellera libg2c ou libgfortran et vous remarquerez un symbole contenant g77
ou < code> gfortran . Donc, votre meilleur pari est d'utiliser grep:
nm filename | grep _g77_
nm filename | grep _gfortran_
Deux notes:
- Grepping pour
@@ GFORTRAN
comme le suggère geocar n'est pas fiable: il ne fonctionnera que sur les plates-formes prenant en charge le contrôle de version de bibliothèque, ce qui inclut par exemple. Linux mais pas Windows ou Mac OS. - Il est toujours possible que certains codes compilés n’appellent absolument aucune fonction de bibliothèque de support (s’il ne s’agit que d’une simple arithmétique et n’a pas d’entrée-sortie, par exemple). Dans ce cas, à moins d’être compilé avec des options de débogage, il est impossible de dire quel compilateur le sort.
Vous pourrez peut-être le comprendre en utilisant nm et voir si le code compilé utilise des fonctions de l’un ou de l’autre, mais c’est tout un hack. Vous pourrez peut-être le déterminer en fonction de la bibliothèque disponible (s'il n'y a pas de libg2c disponible, alors ce n'était pas g77, par exemple), mais vous aurez toujours une certaine ambiguïté si les deux sont disponibles. Si vous pouvez créer la dépendance vous-même, vous pouvez utiliser une partie de votre processus de construction pour indiquer à une autre partie (variable, fichier, etc.) laquelle vous avez utilisée.