2016-10-19 55 views
0

編譯需要它們的C代碼時,我遇到了LAPACK/BLAS庫的問題。未定義引用`zgesvd_' - C彙編中的BLAS問題

的問題是,當我運行「make」,我得到:

file.c:(.text+0x1c41): undefined reference to `zgesvd_' 
file.c:(.text+0x1c9c): undefined reference to `zgetrf_' 
../file.a(SpatialOrientation.o): In function `myfunction.c':myfunction.c:(.text+0x7be): undefined reference to `dsyev_' 

等幾個這樣的線路,都是指類似丟失的參照。

我把這個錯誤追到了BLAS。我按照this excellent link的指示安裝BLAS,並將相關目錄放在路徑上。我也相應地改變了我的Makefile以找到這些庫。

對這個問題的任何幫助將非常感激!

爲了更新,我最近還安裝了itpp,同樣遵循教學here,因爲它似乎是我缺少的引用鏈接到該鏈接。目前沒有變化...

感謝您的幫助!

回答

1

問題解決了!萬歲!我只是手舞足蹈我的辦公室......

對於那些誰有同樣的問題,這裏是我做過什麼:

1)按照給定的here使LAPACK和BLAS庫的說明。套用,爲科學版Linux 6的機器,它們分別是:

wget http://www.netlib.org/lapack/lapack.tgz 
tar xvzf lapack.tgz 
cd lapack-3.3.0 //if version number changes, change here to the right directory 
mv make.inc.example make.inc 

2)則(重要的一點,也建議here):

編輯make.inc並添加-m64 -fPIC標誌Fortran編譯器選項:FORTRAN,OPTS,noopt中,裝載機

然後

make blaslib 
make 

現在,你有什麼,在/lapack-3.6.1(或任何你的目錄這個過程稱爲後)兩個文件:

librefblas.a和liblapack.a。

3)我做的下一件事就是librefblas.a和liblapack.a複製到一些子目錄 - 即/ lib中liblapack.a和/ lib目錄/ libblas爲librefblas.a

4/liblapack)然後,把這些目錄在你的makefile,就像這樣:

LIBDIR1 = /path/lib/lapack 
LIBDIR2 = /path/lib/blas 

LIBS = -L$(LIBDIR1) -llapack -L$(LIBDIR2) -lblas $(SYSLIBS) 
LIBSMPI = -L$(LIBDIR1) -llapack -L$(LIBDIR2) -lblas $(MPILIBS) $(SYSLIBS) 

我還添加/路徑/ lib目錄/ LAPACK和/路徑/ lib目錄/ BLAS到我的LD_LIBRARY_PATH(和路徑,剛剛在的情況下...)

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/lib/lapack:/path/lib/blas 
export PATH=$PATH:/path/lib/lapack:/path/lib/blas 

然後,轉到任何你Makefile所在的地方,然後輸入

make 

Yay yay yay!

順便說一下,在步驟1)中獲得的最新版本的lapack和blas中,我使用gcc version 5.1.0和相應的mpicc(openmpi 1.10。2)。

希望這可以幫助別人,並分享絕對的喜悅。