【问题标题】:RcppArmadillo eig_sym compilation issueRcppArmadillo eig_sym 编译问题
【发布时间】:2018-02-23 11:24:57
【问题描述】:

我正在尝试使用 Rcpparmadillo 获取特征值,如下例所示:[http://gallery.rcpp.org/articles/armadillo-eigenvalues]

当我通过 cppFunction 实现它时,它工作正常。但是,当我创建一个 .cpp 文件并尝试将其合并到我的包中时,在编译过程中出现以下错误:

C:/Users/Administrator/Documents/R/win-library/3.4/RcppArmadillo/include/armadillo_bits/compiler_setup.hpp:474:96:注意:#pragma message: WARNING: use of OpenMP disabled;此编译器不支持 OpenMP 3.0+ #pragma 消息(“警告:禁用 OpenMP 的使用;此编译器不支持 OpenMP 3.0+”) ^ C:/RBuildTools/3.4/mingw_64/bin/g++ -shared -s -static-libgcc -o test.dll tmp.def RcppExports.o binarize_matrix.o char_uniqueC.o colSumsBinaryC.o colSumsC.o df_to_gbi1.o df_to_gbi_focal.o dimC 。 lapplyC.o levelsC.o matchC.o perm_for_data_stream1C.o perm_for_data_stream_Control_factor.o randomization_vetor.o rcpp_hello.o rcpp_hello_world.oreachC.oreachC2.o rowSumsBinaryC.o rowSumsC.o strengthC.ostrengthSymC.o sumC.o sup_0.o unmatchC. o vector_multiplication.o -Ld:/Compiler/gcc-4.9.3/local330/lib/x64 -Ld:/Compiler/gcc-4.9.3/local330/lib -LC:/PROGRA~1/R/R-34~ 1.1/bin/x64 -lR ei.o:ei.cpp:(.text$_ZN4arma6auxlib7eig_symIdNS_3MatIdEEEEbRNS_3ColIT_EERKNS_4BaseIS5_T0_EE[_ZN4arma6auxlib7eig_symIdNS_3MatIdEEEEbRNS_3ColIT_EERKNS_4BaseIS5_T0_EE]+0x5fa):未定义对`dsyev_'的引用 collect2.exe:错误:ld 返回 1 退出状态 没有创建 DLL

编辑 1 我使用的代码与 url 上的代码相同:

#include <RcppArmadillo.h>

// [[Rcpp::depends(RcppArmadillo)]]

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

我使用的是 Windows 10、Rstudio 和 R-3.4.1、RcppArmadillo 0.7.960.1.2、Rcpp 0.12.12

编辑2

对不起。仅当我添加此功能时才会出现错误。这似乎是错误:

ei.o:ei.cpp:(.text$_ZN4arma6auxlib7eig_symIdNS_3MatIdEEEEbRNS_3ColIT_EERKNS_4BaseIS5_T0_EE[_ZN4arma6auxlib7eig_symIdNS_3MatIdEEEEbRNS_3ColIT_EERKNS_4BaseIS5_T0_EE]+0x5fa): 未定义引用`dsyev_' collect2.exe:错误:ld 返回 1 退出状态 没有创建 DLL 错误:包'test'的编译失败

好像和编译器有关,之前我也是这样的:

C:/Users/Administrator/Documents/R/win-library/3.4/RcppArmadillo/include/armadillo_bits/compiler_setup.hpp:474:96:注意:#pragma message: WARNING: use of OpenMP disabled;此编译器不支持 OpenMP 3.0+ #pragma 消息(“警告:已禁用 OpenMP;此编译器不支持 OpenMP 3.0+”)

有人可以帮帮我吗?

提前感谢您的帮助

【问题讨论】:

  • 不可重现、不完整、格式不佳,让我们更容易为您提供帮助。
  • 嗨 Dirk Eddelbuettel,我更新了我的帖子,如果需要,我准备提供更多详细信息。
  • 来吧——错误信息列出了十几个文件,但您却说无法复制图库帖子。这些是不同的东西所以不要假装它们是。而且您的错误消息仍然无法阅读。不要在上面使用降价报价。

标签: c++ r rcpp armadillo


【解决方案1】:

你好像误会了什么。当 R 通过 Rcpp 获取此类文件时,它会链接到 它使用的 LAPACK / BLAS 库,因此只有在您(错误地)假设构建 main() 程序或其他东西时才会出现错误。 p>

这里是一个较短但完全等效的代码版本,显示为在 R 会话的四行中编译、链接、加载和执行:

> library(Rcpp)     # load Rcpp just in case
> cppFunction("arma::vec ei(arma::mat M) { return arma::eig_sym(M); }", 
+              depends="RcppArmadillo")      # linebreak for exposition
> ei(matrix(c(2.0, 0, 0, 1.0), 2, 2))
     [,1]
[1,]    1
[2,]    2
> 

请尝试这四行,并且只尝试这四行。我认为你有不同的问题。

【讨论】:

  • 当然可以。但这是否意味着您可以将其复制到自己的代码中并完全忽略构建指令?不,它没有。
  • 我有以下错误: .Primitive(".Call")(, M) 中的错误:NULL 值作为符号地址传递
  • 您仍然拒绝显示您的代码和构建说明。你继续指出已知的工作代码,并说它对你不起作用没有让我们能够帮助你。这将一事无成。
  • 亲爱的 Dirk Eddelbuettel,对不起,如果编译错误与函数中的编码错误无关,我不熟悉。我会自己检查,当我对编译过程有足够的了解时会回来。非常感谢您,很抱歉让您耽误了时间。
  • 请参阅 StackOverflow 上的 this on how to form an effective post
猜你喜欢
  • 1970-01-01
  • 2014-07-18
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多