【发布时间】:2020-05-02 21:50:31
【问题描述】:
我的包将不会安装在我的机器上或 travis-ci.org 上。 version on CRAN 的唯一更新是我添加了一个小插图。我一直在关注Rcpp - package和R-packages; compiled code的例子。
该错误与这些先前的问题有关,但不是重复的。
- Q40922814 -- 这里的问题是同时使用 C 和 C++ 代码。我只使用 C++ 代码
-
Q36952571 -- 我在 Mac OS 上,所以无法访问
ldconfig,尽管我的问题可能与此有关。
错误:
从包目录:
# Restarting R session...
> Rcpp::compileAttributes()
> devtools::document() # a similar error using devtools::install()
Updating imputeMulti documentation
Loading imputeMulti
Re-compiling imputeMulti
─ installing *source* package ‘imputeMulti’ ...
** using staged installation
** libs
g++ -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I"/Library/Frameworks/R.framework/Versions/3.6/Resources/library/Rcpp/include" -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -I/usr/local/include -fPIC -std=c++0x -c RcppExports.cpp -o RcppExports.o
g++ -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I"/Library/Frameworks/R.framework/Versions/3.6/Resources/library/Rcpp/include" -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -I/usr/local/include -fPIC -std=c++0x -c count_compare.cpp -o count_compare.o
g++ -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I"/Library/Frameworks/R.framework/Versions/3.6/Resources/library/Rcpp/include" -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -I/usr/local/include -fPIC -std=c++0x -c utilities_rcpp.cpp -o utilities_rcpp.o
g++ -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o imputeMulti.so RcppExports.o count_compare.o utilities_rcpp.o -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
installing to /private/var/folders/6h/px5b6ds15b72srhkxc42k9drt2vmnc/T/Rtmpa4w8vb/devtools_install_876345d52e22/00LOCK-imputeMulti/00new/imputeMulti/libs
** checking absolute paths in shared objects and dynamic libraries
─ DONE (imputeMulti)
Error in dyn.load(dllfile) :
unable to load shared object './imputeMulti/src/imputeMulti.so':
dlopen(./imputeMulti/src/imputeMulti.so, 6): Symbol not found: _imputeMulti_supDistC
Referenced from: ./imputeMulti/src/imputeMulti.so
Expected in: flat namespace
in ./imputeMulti/src/imputeMulti.so
以及会话信息:
> sessionInfo()
R version 3.6.3 (2020-02-29)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Mojave 10.14.6
Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] Rcpp_1.0.4.6 compiler_3.6.3 prettyunits_1.1.1 remotes_2.1.1 tools_3.6.3 bit_1.1-15.2
[7] testthat_2.3.2 digest_0.6.25 pkgbuild_1.0.7 pkgload_1.0.2 RSQLite_2.2.0 memoise_1.1.0
[13] rlang_0.4.6 DBI_1.1.0 cli_2.0.2 rstudioapi_0.11 parallel_3.6.3 xfun_0.13
[19] withr_2.2.0 stringr_1.4.0 roxygen2_7.1.0 knitr_1.28 xml2_1.3.2 vctrs_0.2.4
[25] desc_1.2.0 fs_1.4.1 gtools_3.8.2 devtools_2.3.0 bit64_0.9-7 rprojroot_1.3-2
[31] glue_1.4.0 R6_2.4.1 processx_3.4.2 fansi_0.4.1 imputeMulti_0.7.1 sessioninfo_1.1.1
[37] blob_1.2.1 callr_3.4.3 purrr_0.3.4 magrittr_1.5 backports_1.1.6 ps_1.3.2
[43] ellipsis_0.3.0 usethis_1.6.0 assertthat_0.2.1 stringi_1.4.6 crayon_1.3.4
> devtools::build() # works
代码
我的包裹:imputeMulti
我在src/ 中有以下 C++ 文件
# utilities_rcpp.cpp
#include <Rcpp.h>
using namespace Rcpp;
<two minor functions>
# count_compare.cpp
#include <Rcpp.h>
using namespace Rcpp;
<one minor function>
我也有
# imputeMulti-package.R
## usethis namespace: start
#' @importFrom Rcpp sourceCpp, evalCpp
## usethis namespace: end
NULL
#' @useDynLib imputeMulti
.onUnload <- function (libpath) {
library.dynam.unload('imputeMulti', libpath)
}
我的最佳猜测是该错误与 Q36952571 有关,但我不确定如何解决。任何帮助将不胜感激。
【问题讨论】:
-
如果工作和不工作之间的“增量”是添加了小插图,那么我将从删除小插图开始。接下来,使用例如创建一个空的或简单的包。
Rcpp.package.skeleleton()并尝试在其中添加一个小插图。最近,我还决定,由于各种原因,小插曲可能会很痛苦,所以我现在喜欢它们预先构建。但是 YMMV、个人喜好等等……