3

我想安装最新版本的numpy(Python 的数值库),并且版本(v1.6.1)还没有在Ubuntu Oneiric 存储库中。当我继续手动安装它时,我读入了需要使用与构建相同的编译器构建的INSTALL文件(由 使用的 fortran 库)。不幸的是,我不知道那是哪个编译器。我没有安装自己 -当我使用. 如果我不得不猜测,我会说,但我宁愿不要把这件事搞砸。numpyLAPACKnumpyLAPACKapt-getnumpyaptgfortran

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

谢谢!

4

2 回答 2

6

从您引用的同一INSTALL文件中...

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 开发几乎已经死了......另一件要检查的事情是 g77(由默认)在符号上附加两个下划线,而 gfortran(默认)只附加一个。这可能是 numpy 知道的最重要的事情......尽管可能存在其他细微的差异(例如,如果 numpy 正在做一些肮脏的黑客攻击以获取存储在公共块中的信息)。

于 2012-04-25T04:29:41.733 回答
2

我知道没有简单的方法,尽管您可能会发现有readelf -a /usr/lib/$SHARED_OBJECT启发性,$SHARED_OBJECT类似的东西在哪里/usr/lib/atlas-base/liblapack_atlas.so.3gf.0(您必须/usr/lib查看您的确切文件名是什么)。

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

  1. 找出你的 Lapack 共享对象属于哪个二进制包 $BINARY_PKGdpkg -l | grep -E '(lapack|atlas)和/或dpkg -S $SHARED_OBJECT
  2. 找出二进制包 $BINARY_PKG 是从哪个源包 $SOURCE_PKG 构建的dpkg -s $BINARY_PACKAGE。在输出中,查找该Source:行。
  3. 更改为一些临时工作目录。
  4. 问题apt-get source $SOURCE_PKG。(或者,apt-get source $BINARY_PKG具有相同的效果。)
  5. 发出ls并注意 Lapack 源目录。
  6. 切换到 Lapack 源目录。
  7. 检查文件debian/control,特别注意相关Build-Depends:行。这将说明构建包所需的内容。
  8. Issue dpkg -s build-essential,它将为您提供有关可用于构建发行版中每个包的编译器的附加信息(您可能必须首先安装该build-essential包)。

所有这一切当然是大量的工作,而且都不是一个简单公式的性质,只是给你你所寻求的答案;但它确实给了你寻找答案的地方。祝你好运。

于 2012-04-25T03:31:46.643 回答