r - 在 Rstudio 中使用 RcppArmadillo 制作 R 包遇到错误 "undefined reference to dsyev"

标签 r rcpp

关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

5年前关闭。




Improve this question




我试图找出一个错误,该错误阻止我使用 RcppArmadillo 制作 R 包“whyNotWork”。该包仅包含一个 .cpp 文件,其中包含一个返回矩阵特征值的简单函数:

// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>

// [[Rcpp::export]]
arma::vec getEigenValues(arma::mat M) 
{
    return arma::eig_sym(M);
}

在描述文件中,我添加了:
Imports:
    Rcpp (>= 0.12.1), RcppArmadillo
LinkingTo:
    Rcpp, RcppArmadillo
Depends: RcppArmadillo

在 NAMESPACE 文件中,我添加了:
exportPattern("^[[:alpha:]]+")
useDynLib(whyNotWork)
import(RcppArmadillo)
importFrom(Rcpp, evalCpp)

如果我没有尝试制作包,该功能可以正常工作——“源”按钮将成功加载该功能并且它可以正常工作。但是,在制作包时,点击“Build & Reload”按钮会出现以下错误:

arma.o:arma.cpp(.text$_ZN4arma6auxlib7eig_symIdNS_3MatIdEEEEbRNS_3ColIT_EERKNS_4BaseIS5_T0_EE[_ZN4arma6auxlib7eig_symIdNS_3MatIdEEEEbRNS_3ColIT_EERKNS_4BaseIS5_T0_EE]+0x28d): undefined reference to `dsyev_'



我在谷歌上搜索了“dsyev”,它似乎与 LAPCAK 有关。

一个办法:

在 src 文件夹中新建一个 .txt 文件。添加
PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)

在文件中。

将 txt 文件重命名为 Makevars.win(如果不是 Windows 系统,则没有 .win)。打包成功。

通过比较RcppArmadillo.package.skeleton()生成的文件找到解决办法以及来自 Rstudio 的那些

最佳答案

你的操作系统是什么?

什么R CMD config LAPACK_LIBS返回?

您是自己构建 R 还是下载了二进制文件?

在大多数系统(Linux、OS X 等)上,R 将使用外部 LAPACK 库。在 Windows 上,它可能使用它自己的(减少的)LAPACK 副本,该副本缺少某些功能。

值得一提的是,您的程序在我的系统上使用外部 LAPACK 库构建得很好:

R> sourceCpp("/tmp/arma_sym.cpp")
R> v <- 1:4; getEigenValues(v %*% t(v))  
             [,1]
[1,] -2.33587e-15
[2,]  0.00000e+00
[3,]  2.33587e-15
[4,]  3.00000e+01
R> 

关于r - 在 Rstudio 中使用 RcppArmadillo 制作 R 包遇到错误 "undefined reference to dsyev",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34186508/

相关文章:

r - 访问变量值,其中变量名称存储在字符串中

r - 这在 Rcpp 中是否正确?

c++ - 打印定位错误代码块

用零替换负值

c++ - 带有 exit(1) 调用的库的 Rcpp

r - 如何有效地计算 data.table 的唯一(数字)列向量?

R ggplot2 两级构面包裹

javascript - 绘图轴标题上的工具提示

r - 如何使用带有 R "by"功能的订单簿?

Rcpp jupyter 笔记本