R包提交CRAN遇Debian预测试失败:OMP Error #13断言错误
Debian环境下R包calibmsm的OMP断言错误解决指引
错误背景
提交R包calibmsm至CRAN时,所有本地检查(含devtools::check_win_devel())通过,但Debian预测试环境在289项测试全部通过后出现OMP: Error #13: Assertion failure at kmp_runtime.cpp(6891)错误,本地无法复现。
解决步骤
- 强制测试阶段单线程运行:在
tests/testthat.R脚本开头添加代码,强制OpenMP使用单线程,避免线程资源冲突:Sys.setenv(OMP_NUM_THREADS = 1) - 检查OpenMP代码的资源清理:若包中C/C代码手动设置过OpenMP线程数,确保函数退出时恢复原线程配置。示例C代码:
#include <omp.h> void your_omp_function() { int orig_threads = omp_get_max_threads(); omp_set_num_threads(4); // 业务逻辑代码 omp_set_num_threads(orig_threads); // 恢复初始线程数 } - 调整编译配置:在
src/Makevars中明确OpenMP编译链接选项,适配Debian的gcc环境:PKG_CXXFLAGS += -fopenmp PKG_LIBS += -fopenmp - 向CRAN说明情况:若上述调整无效,提交包时在备注中说明该错误仅出现在Debian预测试环境,测试逻辑本身全部通过,请求CRAN团队协助排查环境相关问题。
内容的提问来源于stack exchange,提问作者AP30
相关产品推荐
相关产品推荐

