如何将fftw3链接到eclipsemars-c++

how to link fftw3 to eclipse mars c++?

本文关键字:eclipsemars-c++ 链接 fftw3      更新时间:2023-10-16

我正在尝试将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 的新手

这些函数(__imp_fftw_destroy_plan)没有在标头中定义:必须提供到fftw库的路径。如果您希望继续使用eclispe的建筑实用程序,请完成以下步骤:

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

2) 在C/C++"常规"/"路径和符号"中,单击Include活门。您已经为C++添加了fftw3.h的路径。这对应于g++的包含搜索路径,即-I标志。

3) 单击Library Paths襟翼并将路径添加到libfftw3.a。这对应于g++的库搜索路径CCD_ 10。

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

在构建项目时,Console窗口中会显示以下命令:

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,除了*nix系统上常见的常规"libfftw3.a"约定外,MinGW还支持根据"libfftw3.lib"answers"libffTwi3.dll"约定命名的库。请参阅此处获取预编译的FFTW 3.3.4 windows DLL。怎么了:是libfft3-3.dll

您也可以通过在项目属性的C/C++ Builder折页中取消锁定Use default buid command来调用自己的构建过程。这样,您就可以提供自己的命令。您也可以通过取消锁定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;
}

我会使用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)