如何将fftw3链接到eclipse mars c ++?

时间:2016-05-27 05:39:47

标签: c++ eclipse

到目前为止,我试图将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'

的未定义引用

请帮忙。我是eclipse的新手

2 个答案:

答案 0 :(得分:0)

我会用cmake来创建项目。 这是我使用的fftw部分(使用VC但也应该使用Eclipse)。

PS:是的,我有点懒于创建一个项目,我不需要在调试时手动更改路径

set (FFTW_DIR "C://fftw-3.3.4-dll32")
...
find_path (FFTW_DIR fftw3.h)
INCLUDE_DIRECTORIES(${FFTW_DIR})
link_directories("${FFTW_DIR}")
...

TARGET_LINK_LIBRARIES(libfftw3-3 libfftw3f-3 libfftw3l-3)

答案 1 :(得分:0)

标题中未定义这些函数(__imp_fftw_destroy_plan):必须提供fftw库的路径。如果您希望继续使用eclispe的构建实用程序,请执行以下步骤:

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

2)在C / C ++ General / Path and Symbols中,点击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。结果:它是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;
}