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)