Use*_*now 5 r shared-objects rcpp r-package
我是 R 包开发的新手。我正在开发一个包 (bartpkg),它的src/文件夹中有一个 (prime) cpp 文件和一些辅助 cpp ( X.Cpp, Y.Cpp) 和一个 c 文件 ( Z.C) 及其头文件 ( X.h, Y.hand Z.h)
在 Rstudio 中执行“构建和重新加载”时出现以下错误。
Error in dyn.load(dllfile) :
unable to load shared object '/Users/abcd/BART/bart_pkg1/src/bartpkg.so':
dlopen(/Users/abcd/BART/bart_pkg1/src/bartpkg.so, 6): Symbol not found: __ZN3RNG4nfixElm
Referenced from: /Users/abcd/BART/bart_pkg1/src/bartpkg.so
Expected in: flat namespace
in /Users/abcd/BART/bart_pkg1/src/bartpkg.so
Calls: suppressPackageStartupMessages ... <Anonymous> -> load_all -> load_dll -> library.dynam2 -> dyn.load
Execution halted
Exited with status 1.
Run Code Online (Sandbox Code Playgroud)
我遵循了基本准则来构建包。
.R 文件#' @useDynLib bartpkg在正确的位置有指令。
此外,主要的 cpp 文件在正确的位置具有以下标签。
#include <Rcpp.h>
using namespace Rcpp;
//' @param x A single integer.
//' @export
// [[Rcpp::export]]
Run Code Online (Sandbox Code Playgroud)
我的NAMESPACE文件显示useDynLib(bartpkg)正确。
我能够bartpkg.so在src/目录中看到共享对象文件。
我在终端中尝试了这个命令,c++filt -n _ZN3RNG4nfixElm并且能够看到错误中的符号
未找到符号:__ZN3RNG4nfixElm' 来自 .C 文件 RNG.C 并且是因为函数 'nfix'。
但即使我删除了函数 'nfix' 或RNG.C完全删除了文件,同样的错误:
未找到符号:__ZN3RNG4nfixElm
我的编译器无法编译“C”文件会是一个标志问题吗?我能够看到所有 cpp 文件都生成了各自的目标文件,但我没有看到 C 文件的任何类似内容。
我Makevars在src/目录中有一个只有一行
PKG_LIBS = `$(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()"`
Run Code Online (Sandbox Code Playgroud)
我基本上只是从另一个包中复制了它,更多是因为我对 Rcpp 的理解以及要使用的标志真的更少。
我正在使用 RStudio 是会话信息是
> sessionInfo()
R version 3.3.1 (2016-06-21)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.6 (El Capitan)
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
other attached packages:
[1] bartpkg_0.1.0 packrat_0.4.8-1 Rcpp_0.12.8 msm_1.6.4 LaplacesDemon_16.0.1
loaded via a namespace (and not attached):
[1] roxygen2_5.0.1 lattice_0.20-34 mvtnorm_1.0-5 digest_0.6.10 grid_3.3.1 magrittr_1.5
[7] stringi_1.1.2 Matrix_1.2-7.1 splines_3.3.1 tools_3.3.1 stringr_1.1.0 survival_2.39-5
[13] parallel_3.3.1 rsconnect_0.5 inline_0.3.14 expm_0.999-0
Run Code Online (Sandbox Code Playgroud)
我被这个问题困了好几个星期了。试图阅读“编写 R 扩展”页面,但无法弄清楚。任何帮助将不胜感激。
谢谢你。