2010-07-14 193 views
0

我想在Windows-64位上使用FFTW3。我按照FFTW website的說明:下載軟件包,解壓縮,運行lib.exe來創建.lib「導入庫」。fftw3在Windows 64位

這樣做之後,我建我的應用程序(它運行得很好用FFTW3的DLL 32位),我得到了以下錯誤:

1> pyramidTransform.obj:錯誤LNK2019 :解析的外部符號 __imp_fftw_destroy_plan在函數引用爲 「int __cdecl fourier2spatialband1(INT,INT,浮 *,浮,雙()[2],雙()[2],雙()[2])」 (? fourier2spatialband1 @@ YAHHHPEAM0PEAY01N11 @ Z) 1>金字塔Transform.obj:錯誤 LNK2019:解析的外部符號 __imp_fftw_execute在函數引用爲「int __cdecl fourier2spatialband1(INT,INT,浮 *,浮,雙()[2],雙()[2],雙()[2]) 「 (fourier2spatialband1 @@ @ YAHHHPEAM0PEAY01N11 Z) 1> pyramidTransform.obj:錯誤 LNK2019:解析的外部符號 在功能__imp_fftw_plan_dft_2d引用爲」 int __cdecl fourier2spatialband1(INT,INT,浮 * ,浮動,雙倍()[2],雙倍()[2],雙倍()[2]) 「 (fourier2spatialband1 @@ @ YAHHHPEAM0PEAY01N11 Z) 1> pyramidTransform.obj:錯誤 LNK2019:解析的外部符號 __imp_fftw_free在函數引用爲」 int __cdecl分解(INT,INT,浮 *,INT ,整數,浮點* *,浮* *,浮子*,浮* * *,浮* * *,浮子* *,浮動* *)」(分解@@ @ YAHHHPEAMHHPEAPEAM10PEAPEAPEAM211 Z) 1> pyramidTransform.obj:錯誤 LNK2019:無法解析的外部符號 __imp_fftw_malloc在函數中引用int __cdecl decompose int,int,float, float * *,float * *)「(?decompose @@ YAHHHPEAMHHPEAPEAM10PEAPEAPEAM211 @ Z)

其他依賴項的屬性窗格清楚地顯示我鏈接到libfftw3-3.lib(上面創建)。

我該如何判斷Visual Studio試圖鏈接到什麼?有沒有人在Windows 64位中使用FFTW-3有什麼好運氣?

回答

1

我發現了這個問題。隨着FFTW3,因爲作者已經編譯的DLL適用於Windows,你需要從提供的.def文件創建導入庫(.LIB)文件。您可以通過去到Visual Studio 2008的命令提示符下這樣做的:

lib /def:libfftw3-3.def 

微軟(R)庫管理器版本 9.00.21022.08版權所有(C)微軟公司。版權所有。

鏈接:警告LNK4068:/ MACHINE不是 指定的;默認爲X64
創建庫libfftw3f-3.lib和 對象libfftw3f-3.exp

的問題是,我必須已經開始了錯誤的命令提示符當我第一次創建這些.lib文件。

更多說明可以在FFTW Windows website找到。

請注意,如果您按照上述網站的步驟操作,則需要從不需要管理員權限的文件夾運行命令。通過這樣做,你將能夠獲得你的.lib文件。然後,您只需將它們複製到VS lib文件夾中,即可開始使用。

1

你鏈接的64位版本庫的,不是嗎?你說它在FFTW3 32位DLL上運行良好,所以它聽起來像你正在使用32位庫。 64位版本無法鏈接到32位庫(或者32位DLL)。

+0

我連接到一個64位版本,它被下載到一個單獨的文件夾中。 我的32位應用程序已鏈接到32位dll。我很確定我正在鏈接到fftw3的64位dll。如果你有一個工具可以驗證這一點,我會很感興趣的學習。 – 2010-07-14 03:14:07

+1

你確定嗎?將鏈接器設置爲詳細模式('Project - > Properties - > Linker - > Command Line - >輸入「/ VERBOSE」到Additional Options框中),並查看鏈接器實際搜索的庫。 – 2010-07-14 04:26:13

+0

我放入了標誌,連接器清楚地搜索了「假設正確」的lib文件。我怎麼知道這個lib文件有什麼好處? (即64位,並使用正確名稱修改定義那些符號?) – 2010-07-14 14:56:07