dyn.load(dllfile)出错:无法加载共享对象|预期:平面命名空间

时间:2016-12-02 00:29:31

标签: r rcpp shared-objects r-package

我是R包开发的新手。我正在开发一个包(bartpkg),它在src/文件夹中有一个(主要)cpp文件和一些帮助程序cpp(X.CppY.Cpp)和一个c文件({{1} })及其标题文件(Z.CX.hY.h

当我这样做时,我收到以下错误' Build&刷新'在Rstudio。

Z.h

我已遵循基本指南来构建软件包。

.R文件在正确的位置有指令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.

此外,prime cpp文件在正确的位置有以下标记。

#' @useDynLib bartpkg

我的#include <Rcpp.h> using namespace Rcpp; //' @param x A single integer. //' @export // [[Rcpp::export]] 文件正确显示NAMESPACE

我能够在useDynLib(bartpkg)目录中看到bartpkg.so共享对象文件。

我在终端中尝试了这个命令src/,并且能够看到错误中的符号

  

未找到符号:__ ZN3RNG4nfixElm&#39;来自.C文件RNG.C,是因为函数&#39; nfix&#39;。

但即使我删除了功能&#39; nfix&#39;或者完全删除c++filt -n _ZN3RNG4nfixElm文件,同样的错误:

  

未找到符号:__ ZN3RNG4nfixElm

这可能是一个标志问题,我的编译器无法编译&#39; C&#39;文件? 我能够看到所有cpp文件生成相应的目标文件,但我没有看到类似C文件的内容。

我在RNG.C目录中有Makevars只有一行

src/

我基本上只是从另一个包中复制了,更多的是因为我对Rcpp的理解以及使用哪些标志的确非常少。

我正在使用RStudio会话信息是

PKG_LIBS = `$(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()"`

我已经坚持这个问题好几个星期了。试着阅读&#39;写R扩展&#39;页面,但无法弄清楚这一点。 任何帮助都将受到高度赞赏。

谢谢。

0 个答案:

没有答案