Pregunta

Estoy compilando la 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 es ./configure 'd para vincular con -lg2c o -lgfortran , pero hasta ahora lo he estado haciendo mano.

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

¡Gracias de antemano!

¿Fue útil?

Solución

nm filename | fgrep ' __g77'

dará resultados si se usó g77, mientras tanto

nm filename | fgrep '@@GFORTRAN'

dará resultados si se usa gfortran.

Otros consejos

Necesita grep para algo, en la salida de nm filename , que indica si se utilizó g77 o gfortran. En la mayoría de los casos, si la biblioteca realiza al menos entrada-salida en un lugar, llamará a libg2c o libgfortran y notará un símbolo con g77 , o < code> gfortran . Entonces, su mejor opción es usar grep:

nm filename | grep _g77_
nm filename | grep _gfortran_

Dos notas:

  1. Grepping para @@ GFORTRAN como sugiere geocar no es confiable: solo funcionará en plataformas donde se admite el control de versiones de la biblioteca, que incluye, por ejemplo, Linux pero no Windows o Mac OS.
  2. Todavía es posible que algunos códigos compilados no llamen absolutamente ninguna función de biblioteca de soporte (si todo lo que hace es simple aritmética 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.

Es posible que pueda resolverlo usando nm y ver si el código compilado usa funciones de uno u otro, pero eso es un gran truco. Es posible que pueda resolverlo en función de la biblioteca disponible (si no hay libg2c disponible, entonces no era g77, por ejemplo), pero aún tiene cierta ambigüedad si ambos 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ó.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top