Matlab:无法使用 openmp 编译 mex(未定义的参考)

Posted

技术标签:

【中文标题】Matlab:无法使用 openmp 编译 mex(未定义的参考)【英文标题】:Matlab: Cannot compile mex with openmp (undefined reference) 【发布时间】:2017-12-07 16:22:13 【问题描述】:

在 Matlab 2016b 中编译一些 C++ 代码时使用:

mex CXXFLAGS="\$CXXFLAGS -std=c++11 -fopenmp" CXXOPTIMFLAGS='\$CXXOPTIMFLAGS -Ofast -DNDEBUG mexMyFunction.cpp

我收到以下错误:

undefined reference to `omp_get_thread_num'
undefined reference to `omp_get_num_threads'

系统:Ubuntu 16.04,g++版本:5.4.0。

如果我从上述命令中删除-fopenmp,那么它工作正常。直接使用 g++(不使用 mex)编译也可以。

你能帮我解决这个问题吗?

非常感谢您!

【问题讨论】:

我不知道mex 是如何工作的,但是您还必须将-fopenmp 添加到链接步骤中。 @Zulan 非常感谢!我想通了。 【参考方案1】:

缺少以下链接标志:

LDOPTIMFLAGS="$LDOPTIMFLAGS -fopenmp -O2" -lgomp 

完整的命令:

mex CXXFLAGS="\$CXXFLAGS -std=c++11 -fopenmp" CXXOPTIMFLAGS='\$CXXOPTIMFLAGS -Ofast -DNDEBUG' LDOPTIMFLAGS="$LDOPTIMFLAGS -fopenmp -O2" -lgomp -I"/home/khue/Libs/Eigen" mexMyFunction.cpp 

感谢@Zulan 的建议。

【讨论】:

以上是关于Matlab:无法使用 openmp 编译 mex(未定义的参考)的主要内容,如果未能解决你的问题,请参考以下文章

为啥这段代码(在 Matlab 的 MEX 文件中使用 OpenMP)给出不同的结果?

Matlab 2017a 无法识别编译器(使用 mex 时出错,未找到支持的编译器或 SDK)

Matlab Mex代码未编译

Matlab mex 无法构建,但 gcc 可以

Octave:可以编译 mex,但出现错误:“无法安装 .mex 文件功能”

mex 与 MATLAB2013a 无法识别的开关:-o