【问题标题】:fftw3 on windows 64-bitWindows 64 位上的 fftw3
【发布时间】:2011-03-15 15:13:04
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    lib /def:libfftw3-3.def
    

    Microsoft (R) 库管理器版本 9.00.21022.08 版权所有 (C) Microsoft Corporation。保留所有权利。

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我正在链接一个 64 位版本,该版本已下载到单独的文件夹中。我的 32 位应用程序链接到 32 位 dll。我很确定我正在链接到 fftw3 的 64 位 dll。如果您有可以验证这一点的工具,我将有兴趣学习。
      • 你确定吗?将链接器设置为详细模式 (Project -> Properties -> Linker -> Command Line -> Type in "/VERBOSE" into the Additional Options box.) 并查看链接器实际搜索的库。
      • 我输入了标志,链接器清楚地搜索了“假设正确”的 lib 文件。我怎么知道这个 lib 文件好不好? (即 64 位并使用正确的名称定义这些符号?)
      猜你喜欢
      • 2013-03-15
      • 2012-05-07
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多