2017-11-22 25 views
0

제 목표는 단지 ​​1 차원 예제에서 FFTW를 테스트하는 것입니다. 지침에 따라 이미 모든 것을 설치했습니다. 터미널 오류주고있다Fortran 예제를 컴파일 할 때 -lfftw를 찾을 수 없습니다.

gfortran fftg.f90 -L/usr/local/lib -lfftw3 

: 내가 컴파일 할 때 내 계산에 설치되어 있기 때문에

/usr/bin/ld : can't find -lfftw3 

나는 이유를 이해하지 않습니다와 나는 그것을 위해 찾고 있어요 때 FFTW 라이브러리는 여기에 있습니다

/usr/local/lib$ ls 
cmake libfftw3.a libfftw3.la pkgconfig python2.7 python3.4 R site_ruby 

나는 어떤 답변도 찾지 못했습니다. 어디서 오류가 발생 했습니까? 자세한 내용은이 (http://homepage.ntu.edu.tw/~wttsai/fortran에서 가져온) 내 코드는

program example 

implicit none 
include 'fftw3.f90' 
integer, parameter :: N=16 
integer*8 :: PLAN_FOR,PLAN_BAC 
real*8,dimension(N) :: IN,OUT,IN2 
real*8 :: xj 
integer :: j,k,mode 
real*8, parameter ::twopi=2.*acos(-1.) 
!Discrete data of function f(x)=cos(x)+0.2*sin(2x) 
do j=0,N-1 
    xj=twopi*real(j)/real(N) 
    IN(j)=cos(xj) +0.2*sin(2.*xj) 
end do 

write(*,*) "Original data" 
do j=1,N 
    write(*,100) j,IN(j) 
end do 
100 format(i4,f12.5) 

! Forward transform 

call dfftw_plan_r2r_1d(PLAN_FOR,N,IN,OUT,FFTW_R2HC,FFTW_ESTIMATE) 
call dfftw_execute_r2r(PLAN_FOR,IN,OUT) 
OUT=OUT/real(N,KIND=8)   

! Normalize 
write(*,*) "Fourier coefficient after forward FFT" 

do k=1,N 
    mode=k-1 
    if(k > N/2+1) mode=N-k+1 
    write(*,100) mode,OUT(k) 
end do 

call dfftw_destroy_plan(PLAN_FOR) 
end program example 
+0

'-lfftw3'라고하지만 오류는'-lfftw'입니다. 그럼 어느 것이 옳은가요? 모든 것을 정확하고 정확하게 복사하십시오. 복사하여 붙여 넣기를 사용하십시오. 어떻게 경로를 설정 했습니까? '$ LIBRARY_PATH'를 사용합니까? '$ LD_LIBRARY_PATH'를 사용합니까? 라이브러리를 어떻게 설치 했습니까? 수동으로 해 봤어? –

+0

예, 죄송합니다. 올바른 '-lfftw3'입니다. fftw에서 제공하는 쉬운 지침에 따라 모든 것을 설치했습니다. (그냥 'configure', 'make', 'make install') –

답변

0

당신은 일반적으로 경로도 설정을 가지고,하지만 난 당신이 대신 -L/usr/local/lib를 사용하십시오. 그것은 연결을 위해 충분해야합니다 (반드시 실행되는 것은 아닙니다).

하지만 컴파일 된 FFTW는 정적 (.a)이며 동적으로 컴파일하고 있습니다. -static으로 컴파일을 시도 할 수 있습니다. 동적으로 링크해야하는 경우 라이브러리의 동적 버전 (.so)을 설치해야합니다 (즉 -enable-staticconfigure에 사용하지 마세요).

+0

"설치 경로"(지침에 언급되지 않았 음) 또는 동적/정적 컴파일로 실제로 무엇을 이해하는지 모르겠습니다. 'gfortran fftg.f90 -static/usr/local/lib -lffw3'을 컴파일하려고했지만 작동하지 않습니다. –

+0

'작동하지 않습니다'라고 절대로 말하면 안됩니다. 무슨 일이 있었는지 말해봐. -static과/usr 사이에 공백이 있어야합니다. 정적 및 동적 방법과 링커 경로를 설정하는 방법에 대해 더 많이 연구해야합니다. 여기서는 큰 교훈을 쓸 수 없습니다. –

+0

'gfortran fftg.f90 -static/usr/local/lib -lffw3'그리고 터미널은 나를 'fftg.f90 : 4 : 오류 : 포함 된 파일 'fftw3.f90''을 열 수 없습니다. 내가 fftw3.f90 파일을 가지고 있기 때문에 왜 그런지 모르겠다. –