首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译和链接KISSFFT

编译和链接KISSFFT
EN

Stack Overflow用户
提问于 2012-06-23 05:06:35
回答 2查看 3.6K关注 0票数 2

我在“开箱即用”编译和链接kissfft库时遇到了一个新问题。我已经下载了kissfft库并将其解压缩到了一个test目录中。在进入目录并运行'make testall‘时,我得到以下错误,看起来std c数学库没有正确链接。

代码语言:javascript
复制
sharkllama@quaaludes:~/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
sharkllama@quaaludes:~/KISSFFT/kiss_fft129$ 

显然,makefile试图链接到数学库,因为其中包含了-lm选项。我不明白这是什么意思。我以前已经编译了许多程序,它们正确地链接到了数学库。任何帮助都将不胜感激。谢谢,-B

EN

回答 2

Stack Overflow用户

发布于 2012-06-23 22:55:43

Kissfft不是像其他库那样需要制作和安装的东西。如果你需要复杂的kiss_fft.c,那么你需要做的就是在你的项目中编译ffts。如果你需要更专业的东西,比如多维或实数fft,那么你也应该从工具dir编译合适的文件。

make目标主要用于kissfft的开发测试。要进行这种测试,有很多系统要求。除非您正在更改kissfft的内部结构,否则您将不需要使用这些测试目标。

票数 4
EN

Stack Overflow用户

发布于 2020-05-18 20:01:15

我只想分享一个关于如何使用kissfft的一维FFT/IFFT构建简单应用程序的实用示例

代码语言:javascript
复制
g++ example.cpp -o example -I kissfft kissfft/kiss_fft.c 

example.cpp

代码语言:javascript
复制
#include "kissfft/kiss_fft.h"

int main()
{
    // initialize input data for FFT
    float input[] = { 11.0f, 3.0f, 4.05f, 9.0f, 10.3f, 8.0f, 4.934f, 5.11f };
    int nfft = sizeof(input) / sizeof(float); // nfft = 8

    // allocate input/output 1D arrays
    kiss_fft_cpx* cin = new kiss_fft_cpx[nfft];
    kiss_fft_cpx* cout = new kiss_fft_cpx[nfft];

    // initialize data storage
    memset(cin, 0, nfft * sizeof(kiss_fft_cpx));
    memset(cout, 0, nfft * sizeof(kiss_fft_cpx));

    // copy the input array to cin
    for (int i = 0; i < nfft; ++i)
    {
        cin[i].r = input[i];
    }

    // setup the size and type of FFT: forward
    bool is_inverse_fft = false;
    kiss_fft_cfg cfg_f = kiss_fft_alloc(nfft, is_inverse_fft, 0, 0); // typedef: struct kiss_fft_state*

    // execute transform for 1D
    kiss_fft(cfg_f, cin , cout);

    // transformed: DC is stored in cout[0].r and cout[0].i
    printf("\nForward Transform:\n");
    for (int i = 0; i < nfft; ++i)
    {
        printf("#%d  %f %fj\n", i, cout[i].r,  cout[i].i);
    }

    // setup the size and type of FFT: backward
    is_inverse_fft = true;
    kiss_fft_cfg cfg_i = kiss_fft_alloc(nfft, is_inverse_fft, 0, 0);

    // execute the inverse transform for 1D
    kiss_fft(cfg_i, cout, cin);

    // original input data
    printf("\nInverse Transform:\n");
    for (int i = 0; i < nfft; ++i)
    {
        printf("#%d  %f\n", i, cin[i].r / nfft); // div by N to scale data back to the original range
    }

    // release resources
    kiss_fft_free(cfg_f);
    kiss_fft_free(cfg_i);
    delete[] cin;
    delete[] cout;

    return 0;
}    

要使用2D转换,请包含适当的头"kissfft/tools/kiss_fftnd.h",并将构建命令调整为:

代码语言:javascript
复制
g++ example.cpp -o example -I kissfft kissfft/kiss_fft.c kissfft/tools/kiss_fftnd.c

很简单!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11164131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档