c++中未定义的MKL傅立叶变换的引用

c++ undefined reference to MKL fourier Transform

本文关键字:变换 引用 傅立叶 MKL 未定义 c++      更新时间:2023-10-16

我是数学内核库的新手,我在对矩阵的一维编译非常简单的FFT操作时遇到了问题。我知道这个问题是关于链接的,它不是mkl所特有的。

MKL_Complex16 a[4];
MKL_Complex16  a_fft[4];
DFTI_DESCRIPTOR_HANDLE dft_descriptor_handle_kx; 
MKL_LONG status_kx, l;
l=4;
status_kx = DftiCreateDescriptor(&dft_descriptor_handle_kx, DFTI_DOUBLE, DFTI_COMPLEX, 1, l);
status_kx = DftiSetValue(dft_descriptor_handle_kx, DFTI_PLACEMENT, DFTI_NOT_INPLACE);
status_kx = DftiCommitDescriptor(dft_descriptor_handle_kx);
status_kx = DftiComputeBackward(dft_descriptor_handle_kx, a, a_fft);
status_kx = DftiFreeDescriptor(&dft_descriptor_handle_kx);

和我收到这个错误消息:

/tmp/icpcxXraKo.o: In function `main':
testing.cpp:(.text+0x47): undefined reference to `DftiCreateDescriptor_d_1d'
testing.cpp:(.text+0x60): undefined reference to `DftiSetValue'
testing.cpp:(.text+0x6d): undefined reference to `DftiCommitDescriptor'
testing.cpp:(.text+0x85): undefined reference to `DftiComputeBackward'
testing.cpp:(.text+0x92): undefined reference to `DftiFreeDescriptor'

如果你能帮我解决这个问题,我将非常高兴。

您的构建命令应该看起来像这样:

g++ -v -m64 
 -I/opt/intel/mkl/include -I/home/…/include -g -O2 -O2 -o exp_1.exe exp_1.cc 
 -L/opt/intel/composerxe/lib/intel64 
 -L/opt/intel/mkl/lib/intel64 
 -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -liomp5 -ldl -lpthread -Wl,--verbose

具体来说,"-L"应该指向你的MKL库目录,你需要一个"-L"来指向你需要链接的每个库。

语法将根据您的a)应用程序,b)操作系统和c)编译器而有所不同。

您可以在这里找到您的平台的文档:

  • https://software.intel.com/en-us/intel-mkl