调用含OpenMP的MEX后执行clear mex致Matlab无错误崩溃求助
MATLAB调用含OpenMP的MEX文件后执行
clear mex直接崩溃的问题 问题描述
- 编写了如下使用OpenMP的MEX文件:
// main.cpp #include "mex.h" #include "omp.h" void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { int num_threads; int kx; #pragma omp parallel for for (kx = 0; kx < 100; kx++) { if (kx == 0) num_threads = omp_get_num_threads(); float tmp = (float)kx; } mexPrintf("Num threads: %i\n", num_threads); }
- 使用以下命令编译:
mex COMPFLAGS="$COMPFLAGS /openmp" main.cpp -output test_openmp - 异常现象:单独调用
test_openmp()可正常输出线程数;但调用后立即执行clear mex,MATLAB会无错误报告直接崩溃退出;添加pause(1)后再执行clear mex则不会崩溃。 - 实际影响:在需要在MEX调用出错时执行
clear mexprogram的业务场景中,该问题会导致程序异常。命令行运行MATLAB时返回码为-1073741819,调试器未提供有效排查信息。 - 运行环境:MSVC 2022、MATLAB R2021b
解决方案
链接Intel OpenMP实现库libiomp5md.lib可解决该问题,对应的编译命令如下:mex -v -g COMPFLAGS="$COMPFLAGS /openmp" LINKFLAGS="$LINKFLAGS /nodefaultlib:vcomp" '-LC:\Program Files\MATLAB\R2021b\bin\win64\' -llibiomp5md.lib main.cpp -output test_openmp_intel
内容的提问来源于stack exchange,提问作者rinkert
相关产品推荐
相关产品推荐

