到目前为止,我试图将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的新手
答案 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-3
和libfftw3-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;
}