我试图将fftw3库链接到eclipse到目前为止没有成功。我将头文件fftw3.h包含在“路径和符号”中,它能够识别fft_complex和fft_plan,但是这些未引用

未定义对__imp_fftw_destroy_plan'undefined reference to __ imp_fftw_execute的引用”
__imp_fftw_malloc'undefined reference to __ imp_fftw_plan_dft_r2c_1d的未定义引用

请帮忙。我是新来的蚀

最佳答案

标头中未定义这些函数(__imp_fftw_destroy_plan):必须提供fftw库的路径。如果您希望继续使用eclispe的构建工具,请按照以下步骤操作:

1)右键单击项目名称,然后单击Properties

2)在C / C ++常规/路径和符号中,单击Include翻页。您已将路径添加到C ++的fftw3.h。这对应于g ++的包含搜索路径-I标志。

3)单击Library Paths翻板,然后将路径添加到libfftw3.a。这对应于g ++的库搜索路径-L

4)单击Libraries翻盖并添加fftw3。这样,将-lfftw3添加到构建过程的链接步骤中,并且g++将查找libfftw3.a

生成项目后,“控制台”窗口中将显示以下命令:

make all
Building file: ../src/fftwineclipse.cpp
Invoking: GCC C++ Compiler
g++ -I/home/.../fftw_bidon/include -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/fftwineclipse.d" -MT"src/fftwineclipse.d" -o "src/fftwineclipse.o" "../src/fftwineclipse.cpp"
Finished building: ../src/fftwineclipse.cpp

Building target: fftwineclipse
Invoking: GCC C++ Linker
g++ -L/home/.../fftw_bidon/lib -o "fftwineclipse"  ./src/fftwineclipse.o   -lfftw3
Finished building target: fftwineclipse


您可以查看这些行,这些行反映了您在步骤2-4中提供的设置

当然,必须首先在计算机上完全安装fftw3库。请在包管理器(unix)中查看包libfftw3-3libfftw3-dev(静态库libfftw3.a)。如果您在Windows上使用MinGW,请MinGW supports libraries named according to the "libfftw3.lib" and "libfftw3.dll" conventions, in addition to the normal "libfftw3.a" convention common on *nix systems.参见here以获得预编译的FFTW 3.3.4 Windows DLL。 ch:是libfft3-3.dll

您也可以通过取消选中项目属性的Use default buid command翻盖中的C/C++ Builder来调用自己的构建过程。这样,您可以提供自己的命令。您也可以通过取消选中generate Makefiles automatically并修改构建位置来编写自己的makefile。

这是创建项目并测试fftw是否正确链接的最少代码:

#include <iostream>

#include <fftw3.h>

using namespace std;



int main() {

    int N=42;
    fftw_complex in[N], out[N];
    fftw_plan plan = fftw_plan_dft_1d(N,in,out,FFTW_FORWARD,FFTW_ESTIMATE);
    fftw_execute(plan);
    fftw_destroy_plan(plan);
    cout << "end" << endl;
    return 0;
}

08-03 21:31