我正在尝试从MKL网站运行以下示例。
#include <stdio.h>
#include "mkl_vsl.h"
int main()
{
double r[1000]; /* buffer for random numbers */
double s; /* average */
VSLStreamStatePtr stream;
int i, j;
/* Initializing */
s = 0.0;
vslNewStream( &stream, VSL_BRNG_MT19937, 777 );
/* Generating */
for ( i=0; i<10; i++ ) {
vdRngGaussian( VSL_RNG_METHOD_GAUSSIAN_ICDF, stream, 1000, r, 5.0, 2.0 );
for ( j=0; j<1000; j++ ) {
s += r[j];
}
}
s /= 10000.0;
/* Deleting the stream */
vslDeleteStream( &stream );
/* Printing results */
printf( "Sample mean of normal distribution = %f\n", s );
return 0;
}
我正在使用以下CMakeLists.txt文件来编译代码。
cmake_minimum_required(VERSION 3.0.0)
project(rndGen VERSION 0.1.0)
add_executable(rndGen rndGenTest.cpp)
set(CMAKE_VERBOSE_MAKEFILE ON)
set(MKLROOT "C:/Program\ Files\ (x86)/Intel/oneAPI/mkl/latest")
set(MKLLIB "${MKLROOT}/lib/intel64")
target_include_directories(rndGen
PUBLIC ${MKLROOT}/include
)
target_link_libraries(rndGen
PUBLIC ${MKLLIB}/mkl_intel_ilp64.lib
PUBLIC ${MKLLIB}/mkl_intel_thread.lib
PUBLIC ${MKLLIB}/mkl_core.lib
PUBLIC "C:/Program\ Files\ (x86)/Intel/oneAPI/compiler/latest/windows/compiler/lib/intel64_win/libiomp5md.lib"
)
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)
如标题中所述,代码崩溃。VSCode的调试器输出如下:
-------------------------------------------------------------------
You may only use the C/C++ Extension for Visual Studio Code
with Visual Studio Code, Visual Studio or Visual Studio for Mac
software to help you develop and test your applications.
-------------------------------------------------------------------
Loaded 'C:\mklTest\build\Debug\rndGen.exe'. Symbols loaded.
Loaded 'C:\Windows\System32\ntdll.dll'.
Loaded 'C:\Windows\System32\kernel32.dll'.
Loaded 'C:\Windows\System32\KernelBase.dll'.
Loaded 'C:\Windows\System32\vcruntime140d.dll'.
Loaded 'C:\Windows\System32\ucrtbased.dll'.
The program '[16972] rndGen.exe' has exited with code -1073741515 (0xc0000135).
但是,使用以下命令在cmd中手动编译时,代码运行良好。
cl /EHsc rndGenTest.cpp -I "C:\Program Files (x86)\Intel\oneAPI\mkl\latest\include" "C:\Program Files (x86)\Intel\oneAPI\mkl\2021.1.1\lib\intel64\mkl_intel_ilp64.lib" "C:\Program Files (x86)\Intel\oneAPI\mkl\2021.1.1\lib\intel64\mkl_intel_thread.lib" "C:\Program Files (x86)\Intel\oneAPI\mkl\2021.1.1\lib\intel64\mkl_core.lib" "C:\Program Files (x86)\Intel\oneAPI\compiler\latest\windows\compiler\lib\intel64_win\libiomp5md.lib"
代码的输出是
Sample mean of normal distribution = 4.985218
我很确定我在CMakeLists.txt文件中丢失了某些内容。有人可以指出我正确的方向吗?提前致谢。
编辑
感谢您的评论和回答。我尝试了所有这些,但没有一个起作用。我试图更深入地挖掘以找出问题的确切原因。显然,代码可以通过两种方式很好地进行编译。但是,如果直接执行exe文件(直接在cmd中执行),则不起作用。如果我先打开oneAPI命令提示符,然后运行exe,它就可以正常工作。我的猜测是,有一些环境变量或运行时库对exe不可用。如果是这样,我应该更改些什么,以便该exe可以独立运行(而不需要运行oneAPI命令提示符)?
在这种情况下,您可以尝试将测试与顺序mkl的库(mkl_sequential.lib而不是mkl_intel_thread.lib)重新链接,并尝试直接在cmd中执行。或者只是将libiomp5md.dll放入exe文件目录。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句