You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用含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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 23:51:02