2012-04-25 57 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