Mac安装LightGBM执行cmake报Could not find OpenMP_C如何解决
Mac OS 源码编译LightGBM OpenMP报错解决方案
报错原因
- 旧编译教程固定指定
gcc-8/g++-8作为编译器,但当前Homebrew官方源已下线gcc@7、gcc@8等旧版本安装源,执行brew install gcc安装的是更高版本的gcc(如gcc-13、gcc-14)。新版本gcc完全满足LightGBM编译要求,无需额外找旧版本源安装gcc@8。如果环境变量里写死的编译器路径不存在,CMake会自动回退调用系统自带的Clang编译器 - 系统自带Clang默认未内置OpenMP支持,且编译时未显式指定OpenMP库路径,就会触发
Could NOT find OpenMP_C (missing: OpenMP_C_FLAGS OpenMP_C_LIB_NAMES)报错
修复步骤
- 先补装OpenMP依赖
brew install libomp
- 查询Homebrew安装的gcc实际版本号,根据自己的芯片执行对应命令:
# Intel芯片Mac执行 ls /usr/local/bin/gcc-* # M系列(M1/M2/M3等)ARM架构Mac执行 ls /opt/homebrew/bin/gcc-*
执行后会输出类似/usr/local/bin/gcc-13的结果,记下数字后缀的版本号(比如示例里的13)
- 清理之前失败的编译缓存,配置正确的编译器环境变量
先切到之前clone的LightGBM项目根目录,执行以下命令:
# 清理旧的build目录残留 rm -rf build mkdir build && cd build # 把命令里的13替换成上一步查到的实际gcc版本号 export CC=gcc-13 export CXX=g++-13
- 根据芯片类型执行对应的CMake配置命令,显式指定OpenMP相关参数,避免CMake找不到依赖:
# Intel芯片Mac执行 cmake -DOpenMP_C_FLAGS="-fopenmp" \ -DOpenMP_C_LIB_NAMES="libomp" \ -DOpenMP_CXX_FLAGS="-fopenmp" \ -DOpenMP_CXX_LIB_NAMES="libomp" \ -DOpenMP_libomp_LIBRARY=/usr/local/opt/libomp/lib/libomp.dylib \ .. # M系列ARM芯片Mac执行 cmake -DOpenMP_C_FLAGS="-fopenmp" \ -DOpenMP_C_LIB_NAMES="libomp" \ -DOpenMP_CXX_FLAGS="-fopenmp" \ -DOpenMP_CXX_LIB_NAMES="libomp" \ -DOpenMP_libomp_LIBRARY=/opt/homebrew/opt/libomp/lib/libomp.dylib \ ..
- 执行编译和Python包安装
make -j4 # 编译完成后切到Python包目录安装即可 cd ../python-package pip install .
嫌源码编译麻烦的话,直接执行
pip install lightgbm安装官方预编译的wheel包即可,不会出现OpenMP相关编译报错。
内容的提问来源于stack exchange,提问作者Tae In Kim
相关产品推荐
相关产品推荐

