2016-10-19 1 views
0

LAPACK/BLAS 라이브러리가 필요한 C 코드를 컴파일 할 때 문제가 있습니다. 모두가 비슷한 누락 된 참조를 참조'zgesvd_'에 대한 정의되지 않은 참조 - C 컴파일의 BLAS 문제

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_' 

그리고 여러 가지 다른 같은 라인을 : 나는 "make"를 실행하면

문제들은 내가 얻을입니다.

나는이 오류를 BLAS와 관련이 있다는 이유로 쫓아갔습니다. 나는 BLAS를 설치하고 경로에 관련 디렉토리를 넣기 위해 this excellent link에 주어진 지시를 따랐다. 또한이 라이브러리를 찾기 위해 Makefile을 적절하게 변경했습니다.

이 문제에 대한 도움은 정말 감사하겠습니다.

업데이 트 그냥, 내가 누락 된 참조가 연결된 것으로 보였습니다 이후, 최근에, 또한 here 지침에 따라 itpp뿐만 아니라 설치되어 있습니다. 지금까지 변경된 사항이 없습니다 ...

도움 주셔서 감사합니다.

답변

1

문제가 해결되었습니다. 만세!

1)는 LAPACK 및 BLAS 라이브러리를 만들기 위해 here 주어진 지시 사항을 따르십시오 : 난 그냥 여기에 내가 무슨 짓을, 같은 문제를 가지고 사람들을 위해

... 내 사무실 주위에 춤을 추었다.)

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 플래그를 추가 과학적 리눅스 (6) 기계, 의역, 그들이있다 옵션 : FORTRAN, OPTS, noopt 입니 지금 그런 LOADER

make blaslib 
make 

는 /lapack-3.6.1에, (또는 어떤 디렉토리는이 과정 후라고합니다) 당신은 무엇인가 두 파일 :

librefblas.a 및 liblapack.a.

3) 내가 한 다음 일은 일부 하위 디렉토리에 librefblas.a 및 liblapack.a 복사했다 - 즉,/lib 디렉토리/liblapack librefblas.a

4 및/lib 디렉토리/libblas liblapack.a에 대한) 그런 다음 이런 식으로, 당신의 메이크에 해당 디렉토리를 넣어 :

나는 또한 추가
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에 (그리고 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 

예. 예!

덧붙여서, 1 단계에서 얻은 lapack과 blas의 최신 버전에서는 gcc 버전 5.1.0과 해당 mpicc (openmpi 1.10)를 사용하여 컴파일했습니다.2).

희망은 다른 누군가를 돕고 절대 기쁨을 나누기를 바랍니다.