2013-07-22 9 views
0

를 인식 할 수 LAPACK 및 BLAS하지만 내 시스템을 컴파일하고 지금에, netlib.org에서의 LAPACK/BLAS 라이브러리를 링크해야 이 프로젝트는 모두 리눅스 환경에 있습니다. 나는 내가 포트란 90 및 포트란 77의 혼합으로 작성된 프로젝트를 진행하고있는 라이브러리

make blaslib 
make 

를 사용하여 만든 그리고 정상적으로 완료, 또는 적어도 난 그렇게 생각, 지정된 Makefile에 gfortran 컴파일러 플래그를 OPTS = -O2 -fPIC -m64를 사용합니다.

그런 다음 파일을 /usr/local/lib/usr/local/bin//usr/local/lib64/ 에 복사했지만 작동하지 않았습니다. 나는 심지어 옵션 -L/path/to/lapack/liblapack.a을 사용했고 그것은 또한 작동하지 않았다.

qrB.o: In function `qrfactorizeb_': 
qrB.f90:(.text+0x64f): undefined reference to `zgeqp3_' 
collect2: ld returned 1 exit status 
make: *** [run] Error 1 

나는이 오류로 만들기 위해 정말로 확실하지 오전 :

내 코드를 컴파일

, 나는 다음과 같은 오류가 발생합니다. 나는 3 개의 다른 워크 스테이션에서 그것을 테스트했고 도움이되지 못했습니다! 누구든지 나를 도울 수 있습니까?

+1

'gfortran -o qrB.o qrB.f90 -llapack'을 사용해 보셨습니까? –

+0

위와 같이 도움이되지 않으면'-lblas'를 추가해야 할 수도 있습니다. –

+0

답장을 보내 주셔서 감사합니다. :) 사실 나는이 명령을 먼저 시도했다. "-lblas -llapack". 그러나 언급 된 플래그는 작동하지 않았습니다 !!! 혼란스러워 ... 이전 버전을 모두 지우고 새 버전을 다시 설치하기도합니다. 즉,/usr/local/lib /로 복사하면 작동하지 않습니다! 나는 정말로 혼란스럽고 무엇을해야할지 모른다! –

답변

1

나는 전에도 같은 문제가있었습니다! Windows 및 Linux와의 이중 작업 및 Windows의 옵션 사용 용이성은 나에게 재미있는 것을 가르쳐주었습니다!

한번에 컴파일과 같은 : [...] $ ifort liblapack.a libblas.a libslatec.a * .o 인 -o profmm

당신이 알고, 내가 원하는 것을 의미한다 3 개의 라이브러리를 사용하여 내 파일을 컴파일하고 profmm 출력 파일로 링크하십시오. 그것은 어떤 구문 오류가 없지만, 같은 오류가 많이 리드 : preconditioner3.o : 기능 factorb_': preconditioner3.f:(.text+0x1add): undefined reference to zgetrf_ ' 에서. . preconditioner.o : zbesh.f :(텍스트 0xb3 +) :. d1mach_' zbesh.f:(.text+0xcf): undefined reference to i1mach_ ' 에 정의되지 않은 참조 함수 factorpre_': preconditioner.f:(.text+0x13a2): undefined reference to zgetrf_.': zgetri_' zbesh.o: In function zbesh_에 정의되지 않은 참조 preconditioner.f :(텍스트 + 0x18bb) '에서. . . 그리고 ifort가 내 현재 디렉토리에 있어도 내 라이브러리를 읽을 수 없다는 것을 나타내는 더 많은 오류!

그러나 단순히 다음과 같이 명령을 변경 [...] $ ifort * .o 인 liblapack.a libblas.a libslatec.a -o profmm

하고 오류없이 잘 작동! 그래서 이제는 ifort가 내 라이브러리 (로컬 라이브러리)를 읽을 수 있다는 의미입니다! 또한 라이브러리의 순서를 변경하는 것은 매우 중요하며 프로그램 내에서 서브 루틴의 사용 순서에 따라 달라집니다. 그래서 항상 가능한 오류를 검사하기 위해 라이브러리 체인을 재정렬하려고하십시오.

희망이 있습니다.