windows - 无法在 Windows 64 位上使用 Visual C++ Express 链接到 fftw 库

标签 windows visual-c++ fftw

我正在尝试使用 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”中,但我认为这不是问题的原因。

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

谢谢。

最佳答案

以下步骤适用于 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”。在此文件夹中,必要的文件是具有“.dll”、“.lib”和“fftw3.h”的文件。

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

libfftw3-3.lib

  1. 包含库所在的路径: 一种。 “Project > Properties > Configuration Properties > Linker > General > Additional libs directory”,然后我们写“./FFTW_LIBS”。 b. “Project > Properties > Configuration Properties > Depuration > Environment”,然后我们写“./FFTW_LIBS”。

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

关于windows - 无法在 Windows 64 位上使用 Visual C++ Express 链接到 fftw 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9045807/

相关文章:

ruby-on-rails - Ruby on Rails 命令行看起来很奇怪

c++ - 在给定时间段后关闭或放弃 MFC 对话框

c++ - 使用 FFT (FFTW) 计算两个函数的卷积

html - 从 html 文件中删除 br 标签

c++ - OF_SHARE_DENY_NONE 不分享阅读?

c++ - 如何在 VC++ 中使用 CreateProcess API 包含参数?

winapi - 对 OututDebugString 的调用是否应该包含在 #ifdef DEBUG 条件 block 中?

c++ - FFTW信号频谱

c - 我应该使用 Halfcomplex2Real 还是 Complex2Complex

C++ 检测操作系统版本