使用 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 让你摆脱它)。
如果之前有人问过这个问题,我提前道歉,但经过几天的搜索,我仍然找不到合适的答案。
我有一个包,其中包含一些使用 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 让你摆脱它)。