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.
- 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 / odpkg -S $SHARED_OBJECT
. - Averigüe de qué paquete fuente $ SOURCE_PKG el paquete binario $ BINARY_PKG fue creado por
dpkg -s $BINARY_PACKAGE
. En la salida, busque laSource:
línea. - Cambie a algún directorio de trabajo temporal.
- Problema
apt-get source $SOURCE_PKG
. (Alternativamente,apt-get source $BINARY_PKG
tiene el mismo efecto). - Emita
ls
y observe el directorio de origen de Lapack. - Cambie al directorio fuente de Lapack.
- Examine el archivo
debian/control
, prestando especial atención a la línea relevanteBuild-Depends:
. Esto dirá lo que fue necesario para construir el paquete. - 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 paquetebuild-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.