2010-12-06 67 views
2

我使用Visual Studio 2008編寫了一個使用C#的應用程序。我一直在閱讀與英特爾數學庫一起提供的文檔...以及一些論壇......但無法獲得答案。如何將MKL v9.x靜態鏈接到託管C++ DLL中以計算FFT?

這是我在哪裏:

方案: 試圖靜態鏈接MKL v9.x的到託管C++ DLL來計算FFT,使用Visual Studio 2008

連接器命令: /OUT: 「C:\項目\採集工具包\幹線\構建\調試\ AcquisitionToolkit.FFT.dll」/增量/ NOLOGO/LIBPATH: 「C:\項目\採集工具包\幹線\ LIB \的Win32」/ DLL/MANIFEST /MANIFESTFILE:"Debug\Win32\AcquisitionToolkit.FFT.dll.intermediate.manifest 「/ MANIFESTUAC: 」電平= 'asInvoker' uiAccess = '假',「/ DEBUG/ASSEMBLYDEBUG/PDB:」 C:\項目\徒quisition工具包\幹線\構建\調試\ AcquisitionToolkit.FFT.pdb 「/ DYNAMICBASE/FIXED:無/ NXCOMPAT/MACHINE:X86 /KEYFILE:"AcquisitionToolkit.snk」/ ERRORREPORT:PROMPT mkl_c.lib mkl_ia32.lib libguide40.lib KERNEL32。 LIB USER32.LIB GDI32.LIB winspool.lib comdlg32.lib advapi32.lib SHELL32.LIB ole32.lib oleaut32.lib UUID.LIB odbc32.lib odbccp32.lib

連接時獲取的未解析的外部:

1 > FFT.obj:警告LNK4248:'DFTI_DFT_Desc_struct'的無法解析的類型參考標記(0100000E);圖像可能無法運行

在運行時,它崩潰的調用DftiCreateDescriptor,大概是因爲它不知道描述符結構的格式:

//創建FFT描述 DFTI_DESCRIPTOR_HANDLE遞減; long val = DftiCreateDescriptor(& desc,DFTI_DOUBLE,DFTI_REAL,1,length);

//提交FFT描述符 DftiCommitDescriptor(降序); 我們包含mkl_dfti.h頭文件。

有沒有額外的頭文件我們需要或額外的庫,我們需要鏈接?

描述符結構實際定義在哪裏?

我試圖動態鏈接使用mkl_c_dll.lib,但得到了同樣的無法解析的外部連接器警告。

我還需要其他一些鏈接器選項嗎?

請如果有人能給我一些指導/幫助。我真的很感激它。

謝謝!

+0

英特爾網頁上不再提供mkl 9。我沒有安裝最新的10.2 eval,並沒有任何問題鏈接它。http://software.intel.com/en-us/articles/intel-math-kernel-library-intel-mkl-compiling-and-linking-with-microsoft-visual-cc/?wapkw=(mkl+9)您應該只是從C:\ Program Files \ Intel \ MKL \ 9.xx \ ia32 \ lib中缺少一些.lib文件。如果我是你,我會嘗試鏈接文件夾中的所有lib文件 – 2010-12-18 23:27:53

回答

0

據我知道你只能做動態鏈接使用C++/CLR,即/ CLR與/ MT [d]不相容。您需要鏈接到使用/ MD [d]編譯的庫,以便它們使用相同的運行時。我不知道爲什麼它失敗時,你做動態鏈接,但你的理論不正確的描述符聽起來正確

編輯:順便說一句,我不知道它是否是在你的情況的選項,但你可以使用CUDA for在GPU上快速執行FFT(cufft)。