2012-06-22 2 views
2

kissfft 라이브러리를 컴파일하고 링크하는 것과 관련하여 newb 문제가 있습니다. kissfft 라이브러리를 다운로드하여 테스트 디렉토리에 압축을 풉니 다. 디렉토리를 입력하고 'test testall'을 실행하면 다음 오류가 발생합니다. std c 수학 라이브러리가 제대로 링크되지 않은 것처럼 보입니다.KISSFFT 컴파일 및 링크

[email protected]:~/KISSFFT/kiss_fft129$ make testall 
# The simd and int32_t types may or may not work on your machine 
make -C test DATATYPE=simd CFLAGADD="" test 
make[1]: Entering directory `/home/sharkllama/KISSFFT/kiss_fft129/test' 
cd ../tools && make all 
make[2]: Entering directory `/home/sharkllama/KISSFFT/kiss_fft129/tools' 
cc -o fft_simd -Wall -O3 -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Waggregate-return -Wcast-align -Wcast-qual -Wnested-externs -Wshadow -Wbad-function-cast -Wwrite-strings -I.. -DUSE_SIMD=1 -msse -lm ../kiss_fft.c fftutil.c kiss_fftnd.c kiss_fftr.c kiss_fftndr.c 
/tmp/ccFbS0yK.o: In function `kiss_fft_alloc': 
kiss_fft.c:(.text+0xd17): undefined reference to `sincos' 
kiss_fft.c:(.text+0xd6b): undefined reference to `floor' 
kiss_fft.c:(.text+0xe07): undefined reference to `sincos' 
kiss_fft.c:(.text+0xeba): undefined reference to `sqrt' 
/tmp/ccbYqDcf.o: In function `kiss_fftr_alloc': 
kiss_fftr.c:(.text+0x118): undefined reference to `sincos' 
kiss_fftr.c:(.text+0x188): undefined reference to `sincos' 
collect2: ld returned 1 exit status 
make[2]: *** [fft_simd] Error 1 
make[2]: Leaving directory `/home/sharkllama/KISSFFT/kiss_fft129/tools' 
make[1]: *** [tools] Error 2 
make[1]: Leaving directory `/home/sharkllama/KISSFFT/kiss_fft129/test' 
make: *** [testall] Error 2 
[email protected]:~/KISSFFT/kiss_fft129$ 

명백히 메이크 파일은 -lm 옵션이 포함되어 있으므로 수학 라이브러리에 연결하려고합니다. 이것에 대해 이해할 수는 없습니다. 이전에 수학 라이브러리에 제대로 링크 된 수많은 프로그램을 컴파일했습니다. 어떤 도움을 주시면 감사하겠습니다. 감사합니다. -B

답변

4

Kissfft는 다른 라이브러리처럼 만들고 설치해야하는 것이 아닙니다. 복잡한 ffts가 필요한 경우, 프로젝트에서 kiss_fft.c를 컴파일하기 만하면됩니다. 다차원 또는 실제 fft와 같이 좀 더 전문화 된 것이 필요하다면, 도구 디렉토리에서 적절한 파일을 컴파일해야합니다.

make 타겟은 크게 kissfft 개발 테스트 용입니다. 이 테스트에는 많은 시스템 요구 사항이 있습니다. kissfft의 내부를 변경하지 않는 한, 해당 테스트 대상을 사용할 필요가 없습니다.

+0

이해하지만, 오버랩을 구현하고 KISSFFT 라이브러리 (다른 일치하는 필터/상관 관계 기반 루틴과 함께)를 사용하여 오버랩 및 회선 루틴을 추가 할 것입니다. 나는 표준 configure && make && make install을하려고하지는 않았지만, 기본 makefile이 예제 코드를 상자 밖으로 만들 것을 기대하고 있었다. 라이브러리 주위에 내 코드를 래핑 한 다음 추가 기능을 추가 할 것이므로 필자는 자체 메이크 파일을 작성했습니다. 문제 해결됨. – user1352331

+0

또한 README에 테스트 루틴에 필요한 '추가 종속성'이 명시되어 있으면 좋을 것입니다. 이것이 문제의 원인이라고 생각하지 않지만, 어떤 경우 에든 알아두면 좋을 것입니다. – user1352331