Numpy 确定哪个编译器生成了我的LAPACK

Numpy 确定哪个编译器生成了我的LAPACK,numpy,fortran,lapack,gfortran,g77,Numpy,Fortran,Lapack,Gfortran,G77,我想安装最新版本的numpy(一个用于Python的数字库),而该版本(v1.6.1)尚未发布。当我继续手动安装它时,我在文件中读到,numpy需要使用构建LAPACK的编译器(由numpy使用的fortran库)构建。不幸的是,我不知道那是哪个编译器。当我使用apt安装一个较旧的numpy(v1.5.1)时,我自己没有安装LAPACK。如果让我猜的话,我会说,gfortran,但我不想把事情搞砸 如何确定是哪个编译器构建了我当前安装的LAPACK?有没有简单的方法——也许运行一些使用它的for

我想安装最新版本的
numpy
(一个用于Python的数字库),而该版本(v1.6.1)尚未发布。当我继续手动安装它时,我在文件中读到,
numpy
需要使用构建
LAPACK
的编译器(由
numpy
使用的fortran库)构建。不幸的是,我不知道那是哪个编译器。当我使用
apt
安装一个较旧的
numpy
(v1.5.1)时,我自己没有安装
LAPACK
。如果让我猜的话,我会说,
gfortran
,但我不想把事情搞砸

如何确定是哪个编译器构建了我当前安装的
LAPACK
?有没有简单的方法——也许运行一些使用它的fortran代码并检查输出


谢谢

我知道没有简单的方法,尽管你可能会发现
readelf-a/usr/lib/$SHARED\u OBJECT
很有启发性,其中
$SHARED\u OBJECT
类似于
/usr/lib/atlas base/liblapack\u atlas.so.3gf.0
(你必须查看你的
/usr/lib
,看看你的确切文件名是什么)

然而,还有另一种完全不同的获取信息的方式,因为您使用的是Ubuntu,一种Debian的风格

  • 通过
    dpkg-l | grep-E'(Lapack | atlas)
    和/或
    dpkg-S$shared_对象
    找出你的Lapack共享对象属于哪个二进制包$binary|PKG
  • 找出二进制包$binary\u PKG是由
    dpkg-s$binary\u package
    从哪个源包$source\u PKG构建的。在输出中,查找
    源代码:
  • 切换到某个临时工作目录
  • 问题
    apt获取源代码$source\u包装
    。(或者,
    apt get source$BINARY_PKG
    具有相同的效果。)
  • 发出
    ls
    并注意Lapack源目录
  • 更改为Lapack源目录
  • 检查文件
    debian/control
    ,特别注意相关的
    构建依赖:
    行。这将说明构建包需要什么
  • 发布
    dpkg-s build-essential
    ,这将为您提供有关可用于构建发行版中每个软件包的编译器的更多信息(您可能需要首先安装
    build-essential
    软件包)

  • 当然,所有这些都需要大量的工作,而且没有一个简单的公式能够给出你想要的答案;但它确实给了你寻找答案的空间。祝您好运。

    来自您引用的同一
    安装文件

    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.
    

    如果我不得不猜测的话,我可能会猜测gfortran也是因为我所知道的仅有的两个免费fortran编译器是g77和gfortran,而据我所知,g77的开发几乎已经死了。。。另一件需要检查的事情是77国集团(默认情况下)在符号后面加了两个下划线,而gfortran(默认情况下)只加了一个下划线。这可能是numpy最需要知道的事情。。。尽管可能还有其他细微差别(例如,如果numpy正在进行一些肮脏的黑客攻击,以获取存储在公共块中的信息)。

    谢谢!正是我需要的。要在
    lapack
    上使用
    ldd
    ,我将
    cd
    'd转换为
    /usr/lib/
    ,并执行
    $ldd liblapack.
    (我的lapack文件看起来像
    liblapack.so.3gf
    )。我的观点指向
    gfortran
    。再次感谢您找到并分享。@caravagisto没问题,我很乐意帮助您。如果这对你有用,欢迎接受这个答案()谢谢
    readelf
    ,并确认来自
    ldd
    的结果。对于我的需要,其他步骤看起来有点过头了,但是谢谢分享。