我想在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有好运?
答案 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)。