使用 Rcpp 组件 Linux 系统加载 R 包时找不到共享 .so 文件

Shared .so file not found when loading R package with Rcpp component Linux systems

如果之前有人问过这个问题,我提前道歉,但经过几天的搜索,我仍然找不到合适的答案。

我有一个包,其中包含一些使用 Rcpp (package can be found here) 用 C++ 编写的小函数。当尝试在 Linux 系统(本地安装和通过 Github 操作 - Ubuntu 18.04、20.04)上安装此包时,编译过程成功但 R 无法加载包,因为 .so 找不到文件。 Mac 和 Windows 系统运行良好,在这些系统上测试时没有 R CMD CHECK 问题。

请问有什么办法可以解决这个问题吗?我想在 .Makevars 中添加一些内容,但我不知道要添加什么。

在此先感谢您。

─  installing *source* package ‘CBEA’ ...
   ** using staged installation
   ** libs
   g++ -std=gnu++11 -I"/usr/local/lib/R/include" -DNDEBUG  -I'/__w/_temp/Library/Rcpp/include' -I/usr/local/include   -fpic  -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -Wall -pedantic -c RcppExports.cpp -o RcppExports.o
   g++ -std=gnu++11 -I"/usr/local/lib/R/include" -DNDEBUG  -I'/__w/_temp/Library/Rcpp/include' -I/usr/local/include   -fpic  -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -Wall -pedantic -c gmeans.cpp -o gmeans.o
   g++ -std=gnu++11 -shared -L/usr/local/lib/R/lib -L/usr/local/lib -o CBEA.so RcppExports.o gmeans.o -L/usr/local/lib/R/lib -lR
   installing to /tmp/RtmpwFufM0/Rinst8982598ffd0c/00LOCK-CBEA/00new/CBEA/libs
   ** R
   ** data
   ** inst
   ** byte-compile and prepare package for lazy loading
   ** help
   *** installing help indices
   *** copying figures
   ** building package indices
   ** installing vignettes
   ** testing if installed package can be loaded from temporary location
   Error: package or namespace load failed for ‘CBEA’ in library.dynam(lib, package, package.lib):
    shared object ‘cbea.so’ not found
   Error: loading failed
   Execution halted
   ERROR: loading failed
─  removing ‘/tmp/RtmpwFufM0/Rinst8982598ffd0c/CBEA’

您的(生成的)NAMESPACE 文件有两个引用包的条目:

useDynLib(CBEA, .registration = TRUE)
useDynLib(cbea, .registration = TRUE)

删除第二个(删除任何你告诉roxygen2添加它的地方,你会没事的。你看到和引用的错误消息表明一个案例Linux 上的问题,cbea.so 不同于 CBEA.so(而 macOS 和 Windows 让你摆脱它)。