2014-02-15 3 views
1

두 행렬을 Lapack 패키지로 곱하면 어떻게됩니까? 나는 우분투에서 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. 그 배가 당신 길에 있는지 확인하십시오. 또는 당신이 (물론, 그것을 설치 한 후 - 우분투 다른 이름 지정 규칙을 다음과 AFAIK) 대신 -lblas을 시도 할 수 있었다 (나는 당신이 우분투 리눅스를 사용한다고 가정) :

gfortran 0.f90 -lblas -llapack 

편집

양자 택일로, 당신은 할 수있다 라이브러리에 경로를 인수로 직접 전달하십시오. 디폴트로, gfortran은`/ usr/local/lib /``에서 지정된 라이브러리를 찾을 것입니다. 라이브러리가 다른 곳에 있으면

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

lapack이 설치되어 있고 경로에 있는지 어떻게 알 수 있습니까? – MOON

+0

우분투 리눅스에서, 당신은/usr/local/lib 디렉토리에있을 것입니다. lapack/blas (-dev!)가 설치되어 있는지 확인하려면 synaptics를 사용할 수 있습니다. 다르게 위치한 라이브러리를 사용하는 방법에 대한 단락을 추가했습니다. – fuesika

+1

또는'-L/usr/local/lib'을 추가하여이 디렉토리를 링커 검색 경로에 추가하십시오. –