在R Studio中使用brms包编译Stan模型时遇链接错误求助
问题描述
在Windows 10系统下,使用R 4.2.2、brms 2.18.0运行以下brms模型时出现编译错误,该模型在旧电脑可正常运行,新电脑报错,且已重装R、RStudio、rtools仍未解决:
模型代码:
model <- brm(bf(formula), data = df_region, prior = bpriors, warmup = 1000, iter = 5000, chains = 2, cores = 4)
核心错误信息:
Error in compileCode(f, code, language = language, verbose = verbose) : C:\rtools42\x86_64-w64-mingw32.static.posix\bin/ld.exe: file47887957199b.o:file47887957199b.cpp:(.text$_ZN3tbb8internal26task_scheduler_observer_v3D0Ev[_ZN3tbb8internal26task_scheduler_observer_v3D0Ev]+0x1d): undefined reference to `tbb::internal::task_scheduler_observer_v3::observe(bool)' ... Error in sink(type = "output") : invalid connection
解决方案
1. 修正Makevars.win配置
错误源于TBB(线程构建模块)库链接失败,需调整.R/Makevars.win文件:
- 找到路径
C:/Users/ozgur.alptekin/OneDrive - insidemedia.net/Documents/.R/Makevars.win - 打开文件添加以下内容:
STAN_LIBS += -ltbb - 保存后重启RStudio,重新运行模型。
2. 临时禁用并行编译
绕过TBB并行依赖,先尝试单核心编译:
在运行模型前执行:
options(mc.cores = 1)
再执行原模型代码。
3. 更新brms与rstan版本
旧版本brms(2.18.0)可能与R 4.2.2、rtools42存在兼容性问题:
- 更新brms:
install.packages("brms", dependencies = TRUE) - 更新rstan(brms依赖库):
install.packages("rstan", dependencies = TRUE)
更新完成后重启RStudio重试。
4. 检查rtools42环境变量
确保rtools42路径正确加入系统环境变量:
- 打开系统环境变量,确认
PATH包含C:\rtools42\usr\bin和C:\rtools42\x86_64-w64-mingw32.static.posix\bin - 若未添加,手动添加后重启电脑,再打开RStudio尝试编译。
5. 清理Stan编译缓存
旧编译缓存可能导致冲突,执行以下代码清理:
rm(list = ls()) gc() rstan::rstan_options(auto_write = FALSE) unlink(file.path(tempdir(), "rstan"), recursive = TRUE)
清理后重新运行模型。
内容的提问来源于stack exchange,提问作者Ozgur Alptekın
相关产品推荐
相关产品推荐

