Windows 64位上的fftw3

时间:2010-07-14 00:59:27

标签: c++ visual-c++ linker 64-bit fftw

我想在Windows-64位上使用FFTW3。我按照FFTW website上的说明操作:下载软件包,解压缩,运行lib.exe以创建.lib“导入库”。

这样做之后,我构建了我的应用程序(使用FFTW3 dll 32位运行得很好),我得到以下错误:

  

1> pyramidTransform.obj:错误   LNK2019:未解析的外部符号   __imp_fftw_destroy_plan在函数“int __cdecl中引用   fourier2spatialband1(INT,整型,浮点   *,float ,double()[2],double()[2],double()[2])“   (?fourier2spatialband1 @@ YAHHHPEAM0PEAY01N11 @ Z)   1> pyramidTransform.obj:错误   LNK2019:未解析的外部符号   __imp_fftw_execute在函数“int __cdecl中引用   fourier2spatialband1(INT,整型,浮点   *,float ,double()[2],double()[2],double()[2])“   (?fourier2spatialband1 @@ YAHHHPEAM0PEAY01N11 @ Z)   1> pyramidTransform.obj:错误   LNK2019:未解析的外部符号   __imp_fftw_plan_dft_2d在函数“int __cdecl中引用   fourier2spatialband1(INT,整型,浮点   *,float ,double()[2],double()[2],double()[2])“   (?fourier2spatialband1 @@ YAHHHPEAM0PEAY01N11 @ Z)   1> pyramidTransform.obj:错误   LNK2019:未解析的外部符号   __imp_fftw_free在函数“int __cdecl decompose(int,int,float   *,int,int,float * *,float * *,float *,float * * *,float * * *,float * *,float * *)“(?decompose @@ YAHHHPEAMHHPEAPEAM10PEAPEAPEAM211 @ Z)   1> pyramidTransform.obj:错误   LNK2019:未解析的外部符号   __imp_fftw_malloc在函数“int __cdecl中引用   分解(INT,整型,浮点   *,int,int,float * *,float * *,float *,float * * *,float * * *,float * *,float * *)“(?decompose @@ YAHHHPEAMHHPEAPEAM10PEAPEAPEAM211 @ Z)

Additional Dependencies的属性窗格清楚地显示我链接到libfftw3-3.lib(在上面创建)。

如何判断Visual Studio尝试链接到哪些内容?在Windows 64位中有没有人对FFTW-3有好运?

2 个答案:

答案 0 :(得分:2)

我发现了问题。使用FFTW3,由于作者已经编译了Windows的DLL,您需要从提供的.def文件创建导入库(.lib)文件。您可以通过转到Visual Studio 2008命令提示符来执行此操作:

lib /def:libfftw3-3.def
  

Microsoft(R)Library Manager Version   9.00.21022.08版权所有(C)Microsoft Corporation。保留所有权利。

     

LINK:警告LNK4068:/ MACHINE没有   规定;默认为X64
  创建库libfftw3f-3.lib和   object libfftw3f-3.exp

问题是我在第一次创建这些.lib文件时必须启动错误的命令提示符。

可以在FFTW Windows website找到更多说明。

同样重要的是要注意,如果您按照上述网站中的步骤操作,则需要从不需要管理员权限的文件夹中运行命令。通过这样做,您将能够获取.lib文件。然后,您只需将它们复制到VS lib文件夹,即可开始使用。

答案 1 :(得分:1)

您正在链接库的 64位版本,不是吗?你说使用FFTW3 32位DLL可以正常运行,所以听起来你使用的是32位库。 64位版本无法链接到32位库(或者32位DLL)。