2010-12-06 66 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)。