2012-04-25 56 views
3

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

如何找出哪个编译器构建了我当前安装的LAPACK?有没有简单的方法 - 可能运行一些使用它的Fortran代码并检查输出?

谢谢!

回答

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编译器,我知道的是77国集团和gfortran和G77根据我的了解,开发几乎是死的......另一件要检查的是g77(默认情况下)将两个下划线附加到符号,而gfortran(默认情况下)仅附加一个下划线。这可能是numpy知道最重要的东西......尽管可能存在其他细微差别(例如numpy正在做一些肮脏的黑客攻击来存储公共块中的信息)。

+0

谢谢!正是我需要的。要在'lapack'上使用'ldd',我'cd'到'/ usr/lib /'并执行'$ ldd liblapack。*'(我的lapack文件看起来像'liblapack.so.3gf')。我的[结果](http://pastebin.com/pgSHha9R)指向'gfortran'。再次感谢您的发现和分享。 – grisaitis 2012-04-26 21:03:50

+0

@caravaggisto没问题 - 我很乐意提供帮助。如果这对你有用,随时接受这个答案(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)当然:) – mgilson 2012-04-26 21:07:49

+0

再次感谢。 – grisaitis 2012-04-27 02:35:16

1

据我所知,没有简单的方法,但你可能会发现readelf -a /usr/lib/$SHARED_OBJECT照明,其中$SHARED_OBJECT是一样的东西/usr/lib/atlas-base/liblapack_atlas.so.3gf.0(你必须看看你/usr/lib看到你确切的文件名是什么)。

但是,还有另外一种非常不同的方式来获取信息,因为您使用的是Ubuntu,它是一种Debian。

  1. 找出其中的二进制包$ BINARY_PKG您的LAPACK共享对象由dpkg -l | grep -E '(lapack|atlas)和/或dpkg -S $SHARED_OBJECT所属。
  2. 找出从哪个源代码包$ SOURCE_PKG二进制包$ BINARY_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软件包)。

所有这些当然都是很多工作,它们都不是一个简单公式的性质,它只是给你寻求的答案;但它确实为您提供了寻找答案的地方。祝你好运。

+0

谢谢! 'readelf' [效果很好](http://pastebin.com/C4YggTfX),并确认了'ldd'的结果。其他步骤看起来有点矫枉过正,但感谢分享。 – grisaitis 2012-04-26 21:21:40