确定哪个编译器构建了我的LAPACK

时间:2012-04-25 02:38:47

标签: numpy fortran lapack gfortran g77

我想安装最新版本的numpy(Python的数字库),版本(v1.6.1)尚未在Ubuntu Oneiric repositories中。当我继续手动安装它时,我在INSTALL文件中读取numpy需要使用构建LAPACK的相同编译器构建numpy文件LAPACK使用的fortran lib })。不幸的是,我不知道是哪个编译器。当我使用apt-get安装较旧的numpy(v1.5.1)时,我自己没有安装apt - gfortran。如果我不得不猜测,我会说LAPACK,但我宁愿不要搞砸了。

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

谢谢!

2 个答案:

答案 0 :(得分: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正在做一些肮脏的黑客攻击以获取存储在公共块中的信息)。

答案 1 :(得分:2)

我知道没有简单的方法,但你可能会发现readelf -a /usr/lib/$SHARED_OBJECT有点亮,$SHARED_OBJECT就像/usr/lib/atlas-base/liblapack_atlas.so.3gf.0一样(你必须在你的/usr/lib中查看看看你确切的文件名是什么。)

但是,获取信息还有另外一种完全不同的方式,因为你使用的是Debian的Ubuntu。

  1. 通过dpkg -l | grep -E '(lapack|atlas)和/或dpkg -S $SHARED_OBJECT找出您的Lapack共享对象所属的二进制包$ BINARY_PKG。
  2. 找出dpkg -s $BINARY_PACKAGE构建二进制包$ BINARY_PKG的源包$ SOURCE_PKG。在输出中,查找Source:行。
  3. 转换到一些临时工作目录。
  4. 问题apt-get source $SOURCE_PKG。 (或者,apt-get source $BINARY_PKG具有相同的效果。)
  5. 问题ls并注意Lapack源目录。
  6. 转到Lapack源目录。
  7. 检查文件debian/control,特别注意相关的Build-Depends:行。这将说明构建软件包的必要条件。
  8. 问题dpkg -s build-essential,它将为您提供有关可用于构建发行版中每个程序包的编译器的其他信息(您可能必须首先安装build-essential程序包。)
  9. 所有这一切当然都是很多工作,而且没有一个是简单公式的本质,只是给你你寻求的答案;但它确实为你提供了寻找答案的地方。祝你好运。