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!

Était-ce utile?

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:

  1. 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.
  2. 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top