2008-11-19 19 views
7

Estoy compilando una biblioteca para un proyecto privado, que depende de varias bibliotecas. Específicamente, una de las dependencias se compila con Fortran. En algunos casos, he visto la dependencia compilada con g77, en otros la he visto compilada con gfortran. Mi proyecto entonces es ./configure 'd para enlazar con -lg2c o -lgfortran, pero hasta ahora lo he estado haciendo a mano.Cómo saber qué compilador se utilizó: g77 o gfortran

Si es posible, ¿cómo puedo saber, consultando en la biblioteca dependiente (por ejemplo, a través de nm o alguna otra utilidad?), Si el compilador utilizado fue g77 (y luego voy a utilizar -lg2c en mis opciones de enlace) o gfortran (y luego usaré -lgfortran)?

¡Gracias de antemano!

Respuesta

6
nm filename | fgrep ' __g77' 

dará resultados si se utilizó G-77, por su parte

nm filename | fgrep '@@GFORTRAN' 

dará resultados si se utiliza gfortran.

1

Puede averiguarlo usando nm y ver si el código compilado usa funciones de una u otra, pero eso es bastante pirateo. Es posible que pueda averiguarlo en función de qué biblioteca esté disponible (si no hay libg2c disponible, entonces no fue g77, por ejemplo), pero aún tiene alguna ambigüedad si ambas están disponibles. Si puede construir la dependencia usted mismo, puede usar una parte de su proceso de construcción para decirle a otra parte de alguna manera (variable, archivo, etc.) cuál utilizó.

3

Debe buscar algo, en la salida nm filename, que indica si se usó g77 o gfortran. En la mayoría de los casos, si la biblioteca hace al menos entrada-salida en un lugar, llamará a libg2c o libgfortran y verá un símbolo con g77 en él, o gfortran. Por lo tanto, la mejor opción es utilizar grep:

nm filename | grep _g77_ 
nm filename | grep _gfortran_ 

Dos notas:

  1. grepping para @@GFORTRAN como geocar sugerido no es confiable: sólo funcionará en plataformas donde se apoya biblioteca de control de versiones, las cuales incluye, por ejemplo Linux pero no Windows o Mac OS.
  2. Todavía es posible que algunos códigos compilados invoquen absolutamente ninguna función de biblioteca de soporte (si todo lo que hace es aritmética simple y no tiene entrada-salida, por ejemplo). En ese caso, a menos que esté compilado con opciones de depuración, es imposible saber qué compilador lo emite.
Cuestiones relacionadas