RcppArmadillo eig_sym编译问题

时间:2017-09-14 12:53:19

标签: c++ r rcpp armadillo

我试图用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:警告:禁止使用OpenMP;此编译器不支持OpenMP 3.0+      #pragma message(“警告:禁用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 .o edgelist_to_matrix.o ei.o empty_gbi.o equal_0.o extract_charcterVector_elements.o extract_col.o extract_numericVector_elements.o extract_row.o extract_value_from_id.o filtering_matrix.o find_col.o find_matrix_zero.o find_row.o get_association_matrix.o intersectC.o is_squareC.o 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.o reachC.o reachC2.o rowSumsBinaryC.o rowSumsC.o strengthC.o strengthSymC.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

EDIT2

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

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:警告:禁止使用OpenMP;此编译器不支持OpenMP 3.0+    #pragma message(“警告:禁用OpenMP;此编译器不支持OpenMP 3.0 +”)

有人能帮帮我吗?

提前感谢您的帮助

1 个答案:

答案 0 :(得分:0)

你似乎误解了一些事情。当R通过Rcpp来源这样的文件时,它链接到它使用的LAPACK / BLAS库,这样只有当你(错误地)假设构建main()程序或其他东西时才会出现错误。

这是一个较短但完全等效的代码版本,显示为在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
> 

请尝试这四行,只有那四行。你有一个不同的问题。