2012-01-28 74 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

    結束!