2014-02-15 53 views
1

如何通過Lapack包爲Fortran乘以兩個矩陣?我在Ubuntu中使用gfortran編譯器。 我的代碼不工作是:使用lapack的dgemm(鏈接器錯誤)

program main 

integer, parameter :: n = 10 
double precision :: alpha = 1.0, beta = 0.0 
real, dimension(10,10) :: a 

do i1 = 1,n 
    do j1 = 1,n 
    a(i1,j1) = j1 + (i1-1)*n 
    end do 
end do 

call cpu_time(start) 

call DGEMM('N', 'N', n, n, n, alpha, a, n, a, n, beta, a, n) 

call cpu_time(end) 
print *, end - start 

end program main 

我用:

gfortran 0.f90 -llapack 

,它返回:

/tmp/ccPy78g5.o: In function `MAIN__': 
0.f90:(.text+0x110): undefined reference to `dgemm_' 
collect2: ld returned 1 exit status 
+3

你看過手冊嗎?什麼樣的矩陣? – Rook

+0

我添加了我使用過的代碼並不起作用。 – MOON

+1

確切的問題是什麼?一個簡單的「它不起作用」並不能幫助你。 – fuesika

回答

2

錯誤消息意味着,你的編譯器(gfortran)無法找到lapack或者更確切地說dgemm。請確定,該包裝在你的道路上。或者(我假設你使用的是Ubuntu Linux操作系統),你可以嘗試-lblas代替(安裝它,當然後 - 據我所知的Ubuntu遵循不同的命名約定):

gfortran 0.f90 -lblas -llapack 

編輯

或者,您可以直接將路徑作爲參數傳遞給庫。默認情況下,gfortran將在`/ usr/local/lib /``中查找指定的庫。如果圖書館位於其他地方,您可以改爲使用類似

gfortran 0.f90 /path/to/my/library.a 
+0

我怎麼知道lapack已經安裝並且在路徑中? – MOON

+0

在Ubuntu Linux上,您的庫很可能位於/ usr/local/lib中。如果安裝了lapack/blas(-dev!),您可以使用synaptics來查明。我添加了關於如何使用不同位置的庫的段落。 – fuesika

+1

或者添加'-L/usr/local/lib'將這個目錄添加到鏈接器搜索路徑中。 –