2013-09-24 44 views
0

我在一個全新的Cygwin安裝中編譯Fortran代碼時遇到了一些麻煩,我可以追溯到未定義的英特爾svml(短矢量數學庫)函數庫中。gfortran是否在Cygwin上支持svml?

具體而言,我正在形式

import_gamess.o:import_gamess.f90:(.text+0xb58b): 
undefined reference to `vmldPow2' 

和功能vmldPow2svml庫的一部分的誤差,如圖here,我通過作爲一個選項在我生成文件gfortran作爲

F90 = gfortran -m64 -msse2 -O3 -march=native -mtune=native -fopenmp \ 
    -ffast-math -fassociative-math -freciprocal-math -ffinite-math-only \ 
    -fno-signed-zeros -fno-trapping-math -msahf -mmovbe -mrecip \ 
    -mveclibabi=svml -ftree-vectorize -fexternal-blas 
    -fblas-matmul-limit=50 -static 

(我也是用的庫lapacklblas。)

我的筆記本電腦上編譯的文件很好,在Windows 7上運行Cygwin 1.7.17。(這是安裝大約2013-04-18; gfortran版本是4.5.3)。我現在試圖在安裝Cygwin 1.7.25的新桌面上複製安裝,同時也運行Windows 7。我在32位和64位安裝(分別與gfortran 4.7.3和4.8.1一起運行)以及我的桌面上新安裝的64位Cygwin上安裝了上述錯誤。我也是而不是在同一個桌面上的Linux啓動中獲取錯誤,我目前無法獲得。

我很清楚,在較新的Cygwin安裝中,存在(a)到svml的鏈接斷開,或(b)缺少該庫的部分。我盡最大努力尋找恢復該庫的方法,但它似乎是GNU編譯器的固有部分。事實上,GNU編譯器是否放棄了對這個庫的支持?如果不是,那麼我推測我需要修復庫或鏈接到它的文件。在那種情況下,這個庫在哪裏?我應該修復哪些文件以及如何修復?

不過,我認識到,如果出現這種情況,我會吠叫錯誤的樹並且很樂意直接對此進行設置。我應該在哪裏看?

回答

1

對應的鏈接,gfortran 4.8.1該網站讀取-mveclibabi

To use this option, both -ftree-vectorize and -funsafe-math-optimizations 
have to be enabled, and an SVML or ACML ABI-compatible library must be 
specified at link time. 

這同樣適用於4.7.14.7.2版本真。

我的猜測是,您需要安裝Intel MKL(並設置環境)並鏈接它。此外,您需要指定-funsafe-math-optimizations

或者,您可以刪除-mveclibabi=svml並使用向量化內在函數gfortran

+0

MKL安裝需要來自Cygwin,還是從繼承的PATH變量中看到的Windows安裝? –

+0

我們通常在Windows系統上安裝MKL,並通過英特爾編譯器下載到cygwin。但是有很多HowTos,[this](http://software.intel.com/zh-cn/forums/topic/301968)是英特爾的一篇文章,可能會幫助你。 –

+0

謝謝,我會仔細看看那個。關於'gfortran'矢量化內在函數,它們[已經被調用](http://gcc.gnu.org/projects/tree-ssa/vectorization.html#using)通過選項「-ftree-vectorize」,' -O3','-msse2',' - 數學 - 數學'和' - 協會數學'。刪除'svml'需求導致未定義的對[libquadmath庫](http://gcc.gnu)的'strtoflt128'和'quadmath_snprintf'的引用。org/onlinedocs/libquadmath/index.html#Top),即使啓用了gfortran內在函數。 –