2015-06-24 48 views
0

我去了一個標準的ATLAS編譯。所有的測試都通過了,但是當我試圖用下面的命令來編譯:ATLAS-LAPACK沒有鏈接到BLAS

gcc prog.c -o prog -I/home/atlas_build/include -L/home/atlas_build/lib -llapack -lcblas -lm 

它提供了錯誤的溢料:上和

dsyevr.f:(.text+0xbb): undefined reference to `lsame_' 
dsyevr.f:(.text+0xe3): undefined reference to `lsame_' 
dsyevr.f:(.text+0x102): undefined reference to `lsame_' 
dsyevr.f:(.text+0x125): undefined reference to `lsame_' 
dsyevr.f:(.text+0x148): undefined reference to `lsame_' 
/home/atlas_build/lib/liblapack.a(dsyevr.o):dsyevr.f:(.text+0x1ac): more undefined references to `lsame_' follow 
/home/atlas_build/lib/liblapack.a(dsyevr.o): In function `dsyevr_': 
dsyevr.f:(.text+0x39e): undefined reference to `xerbla_' 
dsyevr.f:(.text+0x742): undefined reference to `dscal_' 
dsyevr.f:(.text+0x7cb): undefined reference to `dscal_' 
dsyevr.f:(.text+0x9cb): undefined reference to `dcopy_' 
dsyevr.f:(.text+0xa15): undefined reference to `dcopy_' 
dsyevr.f:(.text+0xa84): undefined reference to `dcopy_' 
dsyevr.f:(.text+0xac2): undefined reference to `dcopy_' 
dsyevr.f:(.text+0x1146): undefined reference to `dscal_' 
dsyevr.f:(.text+0x124b): undefined reference to `dswap_' 

它去,抱怨BLAS功能缺失像dscal_,dcopy_等。我截斷了輸出。這是爲什麼發生?

+0

該錯誤不是來自編譯器,而是鏈接器。顯然缺少一個libray或者在不同的路徑上。 (免責聲明:我不知道阿特拉斯,所以我不能更具體)。 – Olaf

+0

我懷疑你已經構建了你的可執行文件,並且你已經把它移到了某個地方,而不是它編譯它的地方(或者不是),現在它找不到這個庫。您可能需要在鏈接期間設置「rpath」,或者需要設置和導出指向包含它的目錄的「LD_LIBRARY_PATH」。 [**靜態,共享動態和可加載的Linux庫**](http://www.yolinux.com/TUTORIAL/LibraryArchives-StaticAndDynamic.html)是一個體面的教程。首先請參閱[**鏈接LAPACK/BLAS庫**](http://stackoverflow.com/questions/2801297/linking-lapack-blas-libraries?rq=1)。 –

+0

我沒有導出'LD_LIBRARY_PATH'。您發送的鏈接無效。所有的功能不會鏈接,不僅僅是一些。 – avak

回答

0

解決了這個問題。需要鏈接到lgfortran。