2012-01-28 72 views
1

我试图链接到fftw库使用visual C++ express,但我尝试编译时得到链接器错误。我通过使用lib.exe程序创建.lib“导入库”来解释网站(http://fftw.org/install/windows.html)解释的lib文件。无法链接到fftw库使用visual c + + express在Windows 64位

我将.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 

我搜索了堆栈溢出,但大部分的答案解释说,图书馆需要添加额外的依赖性被发现。当我把/详细: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

您必须编辑了fftw3.h头文件,以便使用__declspec(dllimport)。 .h文件建议在“恼人的Windows语法”注释之后这样做。这实际上并不是正确的做法,预编译的DLL不会导出入口点的__imp版本。 – 2012-01-28 14:17:31

+0

谢谢你回到我身边。对不起,迟了回复,我试图删除__declspec(dllimport),并最终得到了很多缺少类型说明符错误。我尝试使用下面建议的32位库,并将暂时解决此问题。我不确定为什么当我使用64位版本时找不到函数名称。 – user1175242 2012-01-31 21:31:55

回答

3

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

  1. 从FFTW组织网站(http://www.fftw.org/install/windows.html)

  2. 下载文件“fftw-3.3dll32.zip为了链接到这些。 dll文件,您需要为它们创建.lib“导入库”,并且可以使用VC++附带的“lib”命令来完成。特别是运行: LIB /def:libfftw3-3.def

在“工具> Visual Studio 2008的命令提示符”,而无需打开任何项目,只是视觉。一旦你进入控制台,你可以使用'cd'命令来放置文件夹所在的根目录,一旦你运行了上面的三行,然后创建'lib文件。

  1. 复制在其中创建的库,然后将其复制到项目文件夹内,我们要使用它,并重新命名文件夹“FFTW_LIBS”的文件夹。在这个文件夹中,必需的文件是'.dll',' .lib'和'fftw3.h'。在项目库的

  2. 包容:“项目>属性>配置属性>链接>输入>附加依赖”,然后我们包括三个新的库文件:

libfftw3-3.lib

  1. 包含libs所在的路径: a。“项目>属性>配置属性>链接器>常规>附加libs目录”,然后写“./FFTW_LIBS”。 b。 “项目>属性>配置属性>净化>环境”,然后写上“./FFTW_LIBS”。

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

+0

谢谢安东尼奥,我试过这个使用库的32位版本,它工作得很好。我不确定当我尝试64位版本时发生了什么问题,但我现在就去解决这个问题。 – user1175242 2012-01-31 21:32:57

0

也许在运行时它会问你fftw dlls丢失。
我得到了这种情况,并简单地把'em到system32文件夹。

0

我在64位Windows 7上使用Visual Studio 2013 Express,并在尝试为x64构建时遇到同样的问题。问题在于我使用“Developer Command Prompt for VS2013”​​shell中的lib.exe生成了.lib.exp。当我从“VS2013 x64交叉工具命令提示符”shell重新生成.lib.exp时,所有引用都已解析。

1

我将介绍一个轻微修改安东尼奥的步骤:

继为我工作就在Windwos 10时,Visual Studio 2017年,32位应用程序,64位计算机:

  1. 下载FFTW预编译3.3.5的Windows DLL和提取.zip文件

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

  2. 打开CMD开发提示2017年VS RC和去提取 文件夹

  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 
  • 添加库路径链接器和编译器:
  • 项目>属性>配置属性>链接>常规>附加库目录=

    C:\ Users \用户名\文件\的Visual Studio 2017 \项目\ MP_2 \ MP_2 \ fftw_lib

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

    C:\ Users \用户名\文件\的Visual Studio 2017 \项目\ MP_2 \ MP_2 \ fftw_lib

  • 包括其中的dll库是路径:
  • 项目>属性>配置属性>调试>环境=

    PATH = C:\ Users \用户名\文件\的Visual Studio 2017 \项目\ MP_2 \ MP_2 \ fftw_lib

    结束!