我正在尝试使用visual c ++ express链接到fftw库,但在尝试编译时遇到链接器错误。我通过使用lib.exe程序创建.lib“import libraries”来解释生成lib文件(http://fftw.org/install/windows.html)。
我将.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”中,但我不认为这是问题的原因。
任何帮助都会非常感激,因为我不知道现在该转向何方。
感谢。
答案 0 :(得分:3)
以下步骤适用于Visual Studio 2008(来自http://itkcorner.blogspot.com/2012/01/inclusion-de-fftw-en-visual-studio-2008.html);
从fftw org网站下载文件“fftw-3.3dll32.zip”(http://www.fftw.org/install/windows.html)
为了从Visual C ++链接到这些.dll文件,您需要为它们创建.lib“导入库”,并且可以使用VC ++附带的“lib”命令。特别是,运行: lib /def:libfftw3-3.def
在“工具>中Visual Studio 2008命令提示符“无需打开任何项目,只需Visual。一旦你进入控制台,就可以使用'cd'命令到放置文件夹的根目录,然后在那里运行上面的三行,然后创建'lib文件。
复制创建库的文件夹,然后将其复制到我们要使用它的项目文件夹中,并将文件夹重命名为“FFTW_LIBS”。在此文件夹中,必要的文件是具有' .dll',' .lib'和'fftw3.h'的文件。
在项目中包含libs:“Project>属性>配置属性>链接器>进入>其他依赖项“然后我们包括三个新的libs文件:
libfftw3-3.lib
包含libs所在的路径: 一个。 “项目>属性>配置属性>链接器>一般>附加的libs目录“,我们写”./FFTW_LIBS“。 湾“项目>属性>配置属性>净化>环境“,我们写”./FFTW_LIBS“。
包含'.dll'文件所在的路径。在“项目>属性>配置属性>净化>环境”。在变量'enviroment'中,我们必须指定文件'libfftw3-3.dll'的位置并写入“PATH =。\ FFTW_LIBS” 完成所有这些步骤后,您只需添加“#include fftw3.h”并使用fftw函数!
答案 1 :(得分:1)
我将对安东尼奥的步骤稍作修改:
以下在Windwos 10,Visual Studio 2017,32位应用程序,x64计算机上为我工作:
下载预编译的FFTW 3.3.5 Windows DLL并解压缩.zip文件
打开VS 2017 RC的开发人员cmd提示并转到解压缩 夹
按如下所示运行lib应用程序以创建导入库 来自.dll库的(.lib文件):
lib /def:libfftw3-3.def
lib /def:libfftw3f-3.def
lib /def:libfftw3l-3.def
将以下文件复制到新文件夹中,调用该新文件夹 fftw_lib :
fftw3.h
libfftw3-3.lib
libfftw3f-3.lib
libfftw3l-3.lib
libfftw3-3.dll
libfftw3f-3.dll
libfftw3l-3.dll
将“fftw_lib”文件夹复制到项目的文件夹中
告诉链接器在项目中包含.lib文件:
项目>属性>配置属性>链接器>进入>其他依赖项=
libfftw3-3.lib
libfftw3f-3.lib
libfftw3l-3.lib
项目>属性>配置属性>链接器>一般>附加的libs目录=
C:\ Users \ Username \ Documents \ Visual Studio 2017 \ Projects \ MP_2 \ MP_2 \ fftw_lib
项目>属性>配置属性> C / C ++盐一般>其他包括目录=
C:\ Users \ Username \ Documents \ Visual Studio 2017 \ Projects \ MP_2 \ MP_2 \ fftw_lib
项目>属性>配置属性>调试>环境=
PATH = C:\ Users \ Username \ Documents \ Visual Studio 2017 \ Projects \ MP_2 \ MP_2 \ fftw_lib
结束!
答案 2 :(得分:0)
也许在运行时它会要求你丢失fftw dll。我得到了这个案子并简单地将它们放入system32文件夹。
答案 3 :(得分:0)
我在64位Windows 7上使用Visual Studio 2013 Express,并且在尝试构建x64时遇到了与您相同的问题。问题是我使用“开发人员命令提示符VS2013”shell中的.lib
生成了.exp
和lib.exe
。当我从“VS2013 x64交叉工具命令提示符”shell重新生成.lib
和.exp
时,所有引用都已解析。