2017-09-14 4 views
0

Je suis en train d'obtenir les valeurs propres avec Rcpparmadillo comme dans cet exemple: [http://gallery.rcpp.org/articles/armadillo-eigenvalues]le numéro de compilation de RcppArmadillo

Quand je l'ai fait par le cppFunction il est beau travail. Cependant, quand je fait un fichier .cpp et essayer de l'intégrer dans mon paquet je l'erreur suivante au cours du processus de compilation:

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

Edit 1 J'utilise le même code que celui sur la url:

#include <RcppArmadillo.h> 

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

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

Je suis sur windows 10, rstudio et R-3.4.1, RcppArmadillo 0.7.960.1.2, CRPP 0.12.12

Edit2

Désolé. L'erreur n'apparaît que lorsque j'ajoute cette fonction. Cela semble être l'erreur:

ei.o: ei.cpp :(texte $ _ZN4arma6auxlib7eig_symIdNS_3MatIdEEEEbRNS_3ColIT_EERKNS_4BaseIS5_T0_EE [_ZN4arma6auxlib7eig_symIdNS_3MatIdEEEEbRNS_3ColIT_EERKNS_4BaseIS5_T0_EE] + 0x5fa):. Undefined reference to `dsyev_ » collect2.exe: Erreur: ld retourné 1 état de sortie aucune DLL a été créé eRREUR: compilation a échoué pour package 'test'

Il semble être lié au compilateur, comme avant que j'ai ceci:

C:/Users/administrateur/Documents/R/win -library/3.4/RcppArmadillo/include/armadillo_bits/compiler_setup.hpp: 474: 96: note: #pragma message: AVERTISSEMENT: utilisation de OpenMP désactivé; ce compilateur ne supporte pas OpenMP 3.0+ #pragma message ("ATTENTION: utilisation de OpenMP désactivé, ce compilateur ne supporte pas OpenMP 3.0+")

Quelqu'un pourrait-il m'aider?

Merci d'avance pour votre aide

+0

Non reproductible, incomplet, mal formaté, facilitons la tâche de nous aider. –

+0

Salut Dirk Eddelbuettel, j'ai mis à jour mon poste, je suis prêt à donner des détails supplémentaires si nécessaire. – Bas

+0

Venez maintenant --- le message d'erreur répertorie une douzaine de fichiers, mais vous parlez de ne pas être en mesure de répliquer la publication de la galerie. Ce ne sont pas la même chose * donc ne prétendez pas qu'ils le sont. Et votre message d'erreur est toujours illisible. N'utilisez pas de guillemets. –

Répondre

0

Vous semblez mal comprendre quelque chose. Lorsque R source un tel fichier via Rcpp, il lie à les bibliothèques LAPACK/BLAS il utilise de sorte que l'erreur ne peut survenir que si vous (à tort) suppose de construire un programme main() ou quelque chose.

Voici une version plus courte, mais tout à fait équivalent du code, présentée comme compilé, lié, chargé et exécuté en quatre lignes d'une session 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 
> 

S'il vous plaît essayer ces quatre lignes, et seules les quatre lignes. Je pense que vous avez un problème différent.

+0

Avec cppFunction, la fonction fonctionne – Bas

+0

Bien sûr que oui. Mais cela signifie-t-il que vous pouvez simplement copier ceci dans votre propre code et ignorer complètement les instructions de construction? Non. –

+0

J'ai l'erreur suivante: Erreur dans .Primitive (".Appelez ") (, M): La valeur NULL transmise comme adresse de symbole – Bas