Linux系统加载含Rcpp组件的R包时提示Shared .so file not found错误
问题根因
Linux 系统文件系统默认大小写敏感,从你的安装日志可以看到编译生成的共享库是大写开头的 CBEA.so,但 R 加载包时检索的是全小写的 cbea.so,二者名称不匹配导致加载失败。Mac 和 Windows 系统默认文件系统大小写不敏感,所以名称大小写不一致也能正常匹配加载,不会触发报错。
修复方案
- 方案一(推荐):检查包根目录下的
NAMESPACE文件,找到useDynLib配置项,如果该项写的是useDynLib(cbea),直接修改为和包名完全一致的useDynLib(CBEA)即可。如果你是用 roxygen2 自动生成NAMESPACE文件,直接修改 R 代码中对应的@useDynLib注释参数为CBEA,重新生成NAMESPACE就可以,避免后续手动修改被覆盖。 - 方案二:在
src/Makevars文件中添加一行配置,指定编译生成的共享库名称为全小写:
该配置会强制编译输出的共享库名为SHLIB = cbea.socbea.so,和 R 检索的名称一致。
修复后重新编译安装包即可解决 Linux 下的加载问题。
内容的提问来源于stack exchange,提问作者Quang Nguyen
相关产品推荐
相关产品推荐

