如何将fftw3链接到eclipsemars-c++
how to link fftw3 to eclipse mars c++?
我正在尝试将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-3
和libfftw3-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)