2017-09-14 112 views
0

我試圖讓與Rcpparmadillo特徵值,如下面的例子:[http://gallery.rcpp.org/articles/armadillo-eigenvalues]RcppArmadillo eig_sym編譯問題

當我通過它的做工精細cppFunction做到了。然而,當我做了一個.cpp文件,並嘗試將其集成到我的包我在編譯過程中出現以下錯誤:

C:/Users/Administrator/Documents/R/win-library/3.4/RcppArmadillo/include/armadillo_bits/compiler_setup.hpp:474:96: note: #pragma message: WARNING: use of OpenMP disabled; this compiler doesn't support OpenMP 3.0+ #pragma message ("WARNING: use of OpenMP disabled; this compiler doesn't support 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): undefined reference to `dsyev_' collect2.exe: error: ld returned 1 exit status no DLL was created

編輯1 我使用相同的代碼上的一個網址:

#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 :(文字$ _ZN4arma6auxlib7eig_symIdNS_3MatIdEEEEbRNS_3ColIT_EERKNS_4BaseIS5_T0_EE [_ZN4arma6auxlib7eig_symIdNS_3MatIdEEEEbRNS_3ColIT_EERKNS_4BaseIS5_T0_EE] + 0x5fa):未定義的引用`dsyev_」 collect2.exe:錯誤:LD返回1個退出狀態 無DLL創建 錯誤:編譯失敗包「測試」

這似乎是相關的編譯器,因爲在此之前,我有這樣的:

C:/用戶/管理員/文檔/ R /勝-library/3.4/RcppArmadillo/include/armadillo_bits/compiler_setup.hpp:474:96:note:#pragma消息:警告:禁用OpenMP;此編譯器不支持OpenMP 3.0+ #pragma消息(「警告:使用OpenMP禁用;此編譯器不支持OpenMP 3.0+」)

有人可以幫助我嗎?

在此先感謝您的幫助

+0

不可重現,不完整,格式不正確,使我們更容易幫助您。 –

+0

嗨德克Eddelbuettel,我更新了我的文章,我準備好給予額外的細節,如果需要。 – Bas

+0

現在加入---錯誤消息列出了十幾個文件,但是你說的是不能複製Gallery文章。這些*不是一回事*所以不要假裝它們是。而你的錯誤信息仍然是不可讀的。不要使用降價報價。 –

回答

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 
> 

請再試那些四行,只有這四線。想想你有一個不同的問題。

+0

用cppFunction函數工作 – Bas

+0

當然是的。但這是否意味着您可以將其複製到自己的代碼中,並完全忽略構建指令?不,不是的。 –

+0

我有以下錯誤:錯誤.Primitive(「。調用「)(<指針:(nil)>,M): NULL值作爲符號地址 – Bas