1

我正在尝试使用 Visual c++ express 链接到 fftw 库,但是当我尝试编译时出现链接器错误。我生成了 lib 文件,正如网站 (http://fftw.org/install/windows.html) 通过使用 lib.exe 程序创建 .lib“导入库”来解释的。

我将 .lib 文件添加到“Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib”,并将 fftw3.h 添加到“Program Files (x86)\Microsoft Visual Studio 9.0\VC\include”。然后我将 dll 文件放在“Windows/system32”文件夹中。我通过将库(libfftw3f-3.lib、libfftw3-3.lib、libfftw3l-3.lib)添加到链接器/输入首选项的其他依赖项来链接这些库。当我尝试编译时,出现以下错误:

    process_wav.obj : error LNK2019: unresolved external symbol __imp__fftwf_destroy_plan referenced in function _main
    process_wav.obj : error LNK2019: unresolved external symbol __imp__fftwf_plan_dft_r2c_1d referenced in function _main

我搜索了堆栈溢出,但大多数答案都解释说需要将库添加到要找到的其他依赖项中。当我将 /verbose:lib 放在命令行选项上时,我得到以下信息:

    f
    fdf

1>Linking...
1>Searching libraries
1>    Searching libfftw3f-3.lib:
1>    Searching libfftw3-3.lib:
1>    Searching libfftw3l-3.lib:
1>    Searching F:\Program Files\Mega-Nerd\libsndfile-win32-bin-1.1.7\libsndfile-1.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbc32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbccp32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\kernel32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\user32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\gdi32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\winspool.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\comdlg32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\advapi32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\shell32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\ole32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\oleaut32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\uuid.lib:
1>    Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\MSVCRTD.lib:
1>    Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\OLDNAMES.lib:
1>    Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\msvcprtd.lib:
1>    Searching libfftw3f-3.lib:
1>    Searching libfftw3-3.lib:
1>    Searching libfftw3l-3.lib:
1>    Searching F:\Program Files\Mega-Nerd\libsndfile-win32-bin-1.1.7\libsndfile-1.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbc32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbccp32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\kernel32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\user32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\gdi32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\winspool.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\comdlg32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\advapi32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\shell32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\ole32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\oleaut32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\uuid.lib:
1>    Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\MSVCRTD.lib:
1>    Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\OLDNAMES.lib:
1>    Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\msvcprtd.lib:
1>    Searching libfftw3f-3.lib:
1>    Searching libfftw3-3.lib:
1>    Searching libfftw3l-3.lib:
1>    Searching F:\Program Files\Mega-Nerd\libsndfile-win32-bin-1.1.7\libsndfile-1.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbc32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbccp32.lib:
1>Finished searching libraries

它似乎找到了库,但不知道在其中找到函数名称的人。我从一个也使用这个库的网站获得了代码,有趣的是函数名称没有出现在“fftw3.h”中,但我认为这不是问题的原因。

任何帮助将不胜感激,因为我不知道现在该转向哪里。

谢谢。

4

4 回答 4

3

以下步骤适用于 Visual Studio 2008(来自http://itkcorner.blogspot.com/2012/01/inclusion-de-fftw-en-visual-studio-2008.html);

  1. 从 fftw org 网站 (http://www.fftw.org/install/windows.html) 下载“fftw-3.3dll32.zip”文件

  2. 为了从 Visual C++ 链接到这些 .dll 文件,您需要为它们创建 .lib“导入库”,并且可以使用 VC++ 附带的“lib”命令来实现。特别是,运行:lib /def:libfftw3-3.def

在“工具 > Visual Studio 2008 命令提示符”中,无需打开任何项目,只需 Visual。进入控制台后,使用“cd”命令进入文件夹所在的根目录,然后运行上面的三行,然后创建“lib 文件”。

  1. 复制创建库的文件夹,然后将其复制到我们要使用它的项目文件夹中,并将文件夹重命名为“FFTW_LIBS”。在此文件夹中,必要的文件是具有“<em>.dll”、“</em>.lib”和“fftw3.h”的文件。

  2. 在项目中包含库:“项目 > 属性 > 配置属性 > 链接器 > 条目 > 附加依赖项”,然后我们包含三个新的库文件:

libfftw3-3.lib

  1. 包含库所在的路径:“项目 > 属性 > 配置属性 > 链接器 > 常规 > 附加库目录”,我们在那里写“./FFTW_LIBS”。湾。“项目 > 属性 > 配置属性 > 净化 > 环境”,我们在那里写“./FFTW_LIBS”。

  2. 包含“.dll”文件所在的路径。在“项目 > 属性 > 配置属性 > 净化 > 环境”中。在变量“环境”中,我们必须指定文件“libfftw3-3.dll”的位置,我们写“PATH = .\FFTW_LIBS” 在所有这些步骤之后,您只需添加“#include fftw3.h”并使用fftw 功能!

于 2012-01-30T08:30:21.310 回答
1

我将对 Antonio 的步骤稍作修改:

以下为我在 Windwos 10、Visual Studio 2017、32 位应用程序、x64 计算机上工作:

  1. 下载预编译的 FFTW 3.3.5 Windows DLL 并解压缩 .zip 文件

    http://www.fftw.org/install/windows.html

  2. 打开 VS 2017 RC 的开发人员 cmd 提示符,然后转到解压缩的文件夹

  3. 按如下方式运行 lib 应用程序以从 .dll 库创建导入库(.lib 文件):

       lib /def:libfftw3-3.def
    
       lib /def:libfftw3f-3.def 
    
       lib /def:libfftw3l-3.def
    
  4. 将以下文件复制到一个新文件夹中,调用该新文件夹fftw_lib

           fftw3.h
           libfftw3-3.lib
           libfftw3f-3.lib
           libfftw3l-3.lib
           libfftw3-3.dll
           libfftw3f-3.dll
           libfftw3l-3.dll
    
  5. 将“fftw_lib”文件夹复制到项目文件夹中

  6. 告诉链接器在您的项目中包含 .lib 文件:

项目>属性>配置属性>链接器>条目>附加依赖项=

       libfftw3-3.lib
       libfftw3f-3.lib
       libfftw3l-3.lib
  1. 将库的路径添加到链接器和编译器:

项目>属性>配置属性>链接器>常规>附加库目录=

C:\Users\用户名\Documents\Visual Studio 2017\Projects\MP_2\MP_2\fftw_lib

项目 > 属性 > 配置属性 > C/C++> 常规 > 附加包含目录 =

C:\Users\用户名\Documents\Visual Studio 2017\Projects\MP_2\MP_2\fftw_lib

  1. 包括 dll 库所在的路径:

项目 > 属性 > 配置属性 > 调试 > 环境 =

PATH=C:\Users\Username\Documents\Visual Studio 2017\Projects\MP_2\MP_2\fftw_lib

结束!

于 2017-02-09T13:20:23.427 回答
0

我在 64 位 Windows 7 上使用 Visual Studio 2013 Express,并且在尝试为 x64 构建时遇到了与您相同的问题。问题是我从“VS2013 的开发人员命令提示符”shell生成.lib.exp使用。lib.exe当我从“VS2013 x64 Cross Tools Command Prompt”外壳重新生成时,所有引用都已解决.lib.exp

于 2014-05-18T02:46:31.630 回答
0

也许在运行时它会询问您是否缺少 fftw dll。
我得到了那个案例,只是把它们放到了 system32 文件夹中。

于 2012-09-19T21:10:41.460 回答