小编use*_*581的帖子

Rcpp:无法加载共享对象,未定义的符号

我正在尝试使用Rcpp将功能从BayesOpt C++库扩展到R.我是一个长期的R用户,但对C++来说相对较新,我遇到了一些问题.我已经按照Rcpp的插图设置了一个包,我理解这是引入外部C++库的最佳方法.

我在src/Makevars中将PKG_CPPFLAGS和PKG_LIBS设置为BayesOpt包含文件夹和库,我在src /中有一个.cpp文件(称为test.cpp),它使用#include来处理来自BayesOpt的一些头文件.在这个文件中,我有// [[Rcpp::export]]我要导出的函数.

当我运行时R CMD check mypackage,库似乎成功运行 - 查看日志,一切顺利,直到它尝试加载刚刚"安装"的软件包.然后,我明白了

** testing if installed package can be loaded
Error in dyn.load(file, DLLpath = DLLpath, ...) : 
  unable to load shared object '/home/me/p3/mypackage.Rcheck/mypackage/libs/mypackage.so':
   /home/me/p3/mypackage.Rcheck/mypackage/libs/mypackage.so: undefined symbol: _ZTIN8bayesopt13DiscreteModelE
Run Code Online (Sandbox Code Playgroud)

在错误日志中. echo _ZTIN8bayesopt13DiscreteModelE | c++filt给出typeinfo for bayesopt::DiscreteModel,这是我的test.cpp文件中第一个使用BayesOpt头的对象.为了解决这个问题,我看起来又高又低,但我似乎找不到一个.我想相信Makevars正确地指向库,因为它能够在第一次安装检查期间找到头文件 - 只有在加载候选包时我得到这个未定义的符号错误.我看过一个使用外部库的Rcpp示例,但是Dirk在我看到的答案中指出RcppGSL,有一个3500+行配置脚本填充了Makevars,并且它有点难以解析.

我很感激任何人的帮助 - 我的最后一招是把所有东西都放进去,src但对于一个已经整齐有序的图书馆来说,这似乎很麻烦而且不那么优雅.

c++ r rcpp

7
推荐指数
1
解决办法
3304
查看次数

R包开发中加载时的正确设置

每个包加载一次,自动运行一些设置代码(在R或C++中)的正确方法是什么?理想情况下,所述代码将在用户执行后执行library(mypackage).现在,它包含在一个setup()需要先运行一次的函数中.

只是为了更多的上下文,在我的具体情况下,我正在使用一个使用glog的外部库,我只需执行google::InitGoogleLogging()一次.它有点尴尬,因为我试图在库中使用它,因为我必须,即使它应该从一个调用main.

c++ r rcpp glog

1
推荐指数
1
解决办法
50
查看次数

标签 统计

c++ ×2

r ×2

rcpp ×2

glog ×1