【问题标题】:Undefined symbol error when trying to depend on RcppAmadillo尝试依赖 RcppAmadillo 时出现未定义符号错误
【发布时间】:2020-07-15 02:05:11
【问题描述】:

我试图在我的包中依赖RcppArmadillo,但是当我尝试在我的包目录中运行命令R CMD build . 时出现错误unable to load shared object /tmp/Rtmp0LswYZ/Rinst82cbed4eaee/00LOCK-alt.raster/00new/alt.raster/libs/alt.raster.so: undefined symbol: dsyev_。但是,在交互式 R 会话中遵循https://stackoverflow.com/a/14165455 上的说明可以正常工作。我还在我的包目录中运行了R -e 'Rcpp::compileAttributes()',它似乎正确地生成了RcppExports.cpp。我做错了什么?

【问题讨论】:

  • 我们需要一个最低限度完整的可验证示例来帮助您。
  • 如果我不得不猜测您的 src/Makevars 缺少 LAPACK BLAS 链接说明。与 RcppArmadillo.package.skeleton() 生成的内容进行比较。
  • drive.google.com/file/d/1NhYGShKXKAtda0zZRM4JOsCNdWZPzioM/… 包含我的设置的最小示例。如果有其他方法可以分享,请告诉我。感谢您的帮助。
  • 我只浏览过但没有src/Makevars -- 看看这个也存在于大量实际工作包中:github.com/RcppCore/RcppArmadillo/blob/master/inst/skeleton/… 第 14 行是你缺少的,第 13 行可能不会有伤害,所以只需复制它。

标签: r rcpp rcpparmadillo


【解决方案1】:

正如上面的 cmets 所推测的那样,真的从一个工作示例开始是有益的。

为了创建一个,我们提供了RcppArmadillo.package.skeleton() 函数。按如下方式使用:

edd@rob:/tmp$ Rscript -e 'RcppArmadillo::RcppArmadillo.package.skeleton("demoPkg")'

Calling kitten to create basic package.
Creating directories ...
Creating DESCRIPTION ...
Creating NAMESPACE ...
Creating Read-and-delete-me ...
Saving functions and data ...
Making help files ...
Done.
Further steps are described in './demoPkg/Read-and-delete-me'.

Adding pkgKitten overrides.
 >> added .gitignore file
 >> added .Rbuildignore file
Deleted 'Read-and-delete-me'.
Done.

Consider reading the documentation for all the packaging details.
A good start is the 'Writing R Extensions' manual.

And run 'R CMD check'. Run it frequently. And think of those kittens.


Adding RcppArmadillo settings
 >> added Imports: Rcpp
 >> added LinkingTo: Rcpp, RcppArmadillo
 >> added useDynLib and importFrom directives to NAMESPACE
 >> added Makevars file with Rcpp settings
 >> added Makevars.win file with RcppArmadillo settings
 >> added example src file using armadillo classes
 >> added example Rd file for using armadillo classes
 >> invoked Rcpp::compileAttributes to create wrappers
edd@rob:/tmp$ 

它应该创建这些文件:

edd@rob:/tmp$ tree demoPkg/
demoPkg/
├── DESCRIPTION
├── man
│   ├── demoPkg-package.Rd
│   ├── hello.Rd
│   └── rcpparma_hello_world.Rd
├── NAMESPACE
├── R
│   ├── hello.R
│   └── RcppExports.R
└── src
    ├── Makevars
    ├── Makevars.win
    ├── rcpparma_hello_world.cpp
    └── RcppExports.cpp

3 directories, 11 files
edd@rob:/tmp$ 

【讨论】:

  • 显然,我错误地运行了Rcpp.pakcage.skeleton 而不是RcppArmadillo.package.skeleton!现在可以了,谢谢!
  • 这些事情发生了。现在你知道了:)
  • @Vijay 顺便说一句,如果它对您有用,请随时接受答案以消除业力;-)
  • 已接受...对于延迟@DirkEddelbuettel 非常抱歉!
猜你喜欢
  • 2020-11-05
  • 2014-05-22
  • 1970-01-01
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
  • 2015-01-16
相关资源
最近更新 更多