0

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

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

1>pyramidTransform.obj:错误 LNK2019:未解析的外部符号 __imp_fftw_destroy_plan 在函数“int __cdecl Fourier2spatialband1(int,int,float *,float ,double ( )[2],double ( )[2],double ( )[2]中引用)" (?fourier2spatialband1@@YAHHHPEAM0PEAY01N11@Z) 1>pyramidTransform.obj:错误 LNK2019:未解析的外部符号 __imp_fftw_execute 在函数“int __cdecl Fourier2spatialband1(int,int,float *,float ,double ( )[2],double ( )[2],double ( )[2])" (?fourier2spatialband1@@YAHHHPEAM0PEAY01N11@Z) 1>pyramidTransform.obj : 错误 LNK2019: 函数“int __cdecl Fourier2spatialband1(int,int,float *,浮动,双倍的 ()[2],double ( )[2],double ( )[2])" (?fourier2spatialband1@@YAHHHPEAM0PEAY01N11@Z) 1>pyramidTransform.obj : 错误 LNK2019: 函数“int __cdecl decompose( int,int,float *,int,int,float * *,float * *,float *,float * * *,float * * *,float * *,float * *)" (?decompose@@YAHHHPEAMHHPEAPEAM10PEAPEAPEAM211@Z) 1>pyramidTransform.obj : 错误 LNK2019: 函数 "int __cdecl decompose(int,int,float *,int,int,float * *,float * *,float *,float * * *,float * * *,float * *,float * *)" (?decompose@@YAHHHPEAMHHPEAPEAM10PEAPEAPEAM211@Z)

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

我怎样才能知道 Visual Studio 试图链接到什么?有人在 Windows 64 位中使用 FFTW-3 运气吗?

4

2 回答 2

2

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

lib /def:libfftw3-3.def

Microsoft (R) Library Manager 版本 9.00.21022.08 版权所有 (C) Microsoft Corporation。版权所有。

链接:警告 LNK4068:未指定 /MACHINE;默认为 X64
创建库 libfftw3f-3.lib 和对象 libfftw3f-3.exp

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

更多说明可以在 FFTW Windows网站上找到。

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

于 2010-07-14T15:04:39.180 回答
1

您正在链接64 位版本的库,不是吗?你说它在 FFTW3 32 位 DLL 上运行良好,所以听起来你正在使用 32 位库。64 位版本不能链接到 32 位库(或 32 位 DLL)。

于 2010-07-14T01:07:08.450 回答