numpy fortran lapack gfortran g77

numpy - Determine qué compilador construyó mi LAPACK



fortran gfortran (2)

Quiero instalar la versión más reciente de numpy (una biblioteca numérica para Python), y la versión (v1.6.1) aún no está en los repositorios de Ubuntu Oneiric . Cuando numpy a instalarlo manualmente, leí en el archivo INSTALL que numpy necesita construirse con el mismo compilador que construyó LAPACK (una lib numpy utilizada por numpy ). Lamentablemente, no sé qué compilador es ese. No LAPACK yo mismo - apt-get hizo, cuando instalé un numpy antiguo (v1.5.1) usando apt . Si tuviera que adivinar, diría gfortran , pero preferiría no estropear esto.

¿Cómo averiguo qué compilador construyó mi instalación actual de LAPACK ? ¿Hay alguna manera fácil, quizás ejecutando algún código Fortran que lo use y examine la salida?

¡Gracias!


Del mismo archivo INSTALL que hizo referencia ...

How to check the ABI of blas/lapack/atlas ----------------------------------------- One relatively simple and reliable way to check for the compiler used to build a library is to use ldd on the library. If libg2c.so is a dependency, this means that g77 has been used. If libgfortran.so is a a dependency, gfortran has been used. If both are dependencies, this means both have been used, which is almost always a very bad idea.

Si tuviera que adivinar, probablemente también adivinaría gfortran ya que los únicos dos compiladores fortran libres que conozco son g77 y gfortran y el desarrollo de g77 está muerto, por lo que sé ... Otra cosa que ver es g77 (por por defecto) se añaden dos guiones bajos a los símbolos, mientras que gfortran (por defecto) solo agrega uno. Esto es probablemente lo más importante para numpy saber ... aunque puede haber otras diferencias sutiles (si numpy está haciendo algún hacking sucio para obtener información almacenada en un bloque común, por ejemplo).


No conozco ninguna manera fácil, aunque puede encontrar que readelf -a /usr/lib/$SHARED_OBJECT iluminando, donde $SHARED_OBJECT es algo así como /usr/lib/atlas-base/liblapack_atlas.so.3gf.0 (tendrá buscar en /usr/lib para ver cuál es tu nombre de archivo exacto).

Sin embargo, hay otra forma bastante diferente de obtener información, ya que estás usando Ubuntu, una versión de Debian.

  1. Averigüe a qué paquete binario $ BINARY_PKG pertenece su objeto compartido de Lapack mediante dpkg -l | grep -E ''(lapack|atlas) dpkg -l | grep -E ''(lapack|atlas) y / o dpkg -S $SHARED_OBJECT .
  2. Averigüe de qué paquete fuente $ SOURCE_PKG el paquete binario $ BINARY_PKG fue creado por dpkg -s $BINARY_PACKAGE . En la salida, busque la Source: línea.
  3. Cambie a algún directorio de trabajo temporal.
  4. Problema apt-get source $SOURCE_PKG . (Alternativamente, apt-get source $BINARY_PKG tiene el mismo efecto).
  5. Emita ls y observe el directorio de origen de Lapack.
  6. Cambie al directorio fuente de Lapack.
  7. Examine el archivo debian/control , prestando especial atención a la línea relevante Build-Depends: . Esto dirá lo que fue necesario para construir el paquete.
  8. Emita dpkg -s build-essential , que le proporcionará información adicional sobre los compiladores disponibles para compilar cada paquete en su distribución (primero deberá instalar el paquete build-essential ).

Todo esto es, por supuesto, mucho trabajo, y nada de eso tiene la naturaleza de una fórmula simple que simplemente te da la respuesta que buscas; pero te da lugares para buscar la respuesta. Buena suerte.