Hi Guys,

I am getting this strange error:

   g++ -m64 -shared -s -static-libgcc -o cme.dll tmp.def RcppExports.o cme.o 
misc.o pb.o C:/Users/Kevin/R/win-library/3.1/RcppMLPACK/lib/x64/libRcppMLPACK.a 
-LC:/R/R-31~1.1/bin/x64 -lRlapack -LC:/R/R-31~1.1/bin/x64 -lRblas -lgfortran 
-Ld:/RCompile/CRANpkg/extralibs64/local/lib/x64 
-Ld:/RCompile/CRANpkg/extralibs64/local/lib -LC:/R/R-31~1.1/bin/x64 -lR
   RcppExports.o:RcppExports.cpp:(.text+0x2f83): undefined reference to 
`condMVNormParams(arma::Col<double>, arma::Mat<double>, arma::Col<unsigned int>, 
arma::Col<double>)'
   collect2: ld returned 1 exit status
   no DLL was created
   ERROR: compilation failed for package 'cme'
   * removing 'C:/Users/Kevin/R/win-library/3.1/cme'

   Exited with status 1.

after trying to build my project in Rstudio on Windows 8.1 , here is the function

   // [[Rcpp::export]]
   Rcpp::List condMVNormParams(arma::vec mu,
                                arma::mat Sigma,
                                arma::uvec inds,
                                arma::vec values)
   {
        // tested, 10x faster than R implementation!
        // convenience: use R index conventions
        inds = inds - arma::ones<arma::uvec>(inds.n_elem);
        // declare return values
        int d               = mu.n_elem;
        int nLeft           = d - inds.n_elem;
        arma::vec muCond    = arma::vec(nLeft);
        arma::mat SigmaCond = arma::mat(nLeft, nLeft);
        // find an ordering, that orders unknown first, known later
        arma::uvec perm = arma::uvec(d);
        int indsFound    = 0;
        int indsNotFound = 0;
        for(int i = 0; i < d; i++)
        {
            if(any(inds == i))
            {
                // that is an index on which we condition -> sort to
   end of vector
                perm(nLeft + indsFound) =  i;
                indsFound               += 1;
            } else {
                // index of coordinate we do not condition on!
                perm(indsNotFound) =  i;
                indsNotFound       += 1;
            }
        }
        // sort mu and Sigma by perm
        mu    = mu(perm);
        Sigma = Sigma(perm, perm);
        // compute conditional matrices
        arma::mat S11 = Sigma.submat(0,     0,     nLeft - 1, nLeft - 1);
        arma::mat S12 = Sigma.submat(0,     nLeft, nLeft - 1, d - 1);
        arma::mat S21 = Sigma.submat(nLeft, 0,     d - 1,     nLeft - 1);
        arma::mat S22 = Sigma.submat(nLeft, nLeft, d - 1,     d - 1);
        arma::vec mu1 = mu.subvec(0, nLeft - 1);
        arma::vec mu2 = mu.subvec(nLeft, d - 1);
        muCond    = mu1 + S12*inv(S22)*(values - mu2);
        SigmaCond = S11 - S12*inv(S22)*S21;
        return Rcpp::List::create(Rcpp::Named("mu")    = muCond,
                                  Rcpp::Named("Sigma") = SigmaCond);
   }

I did not touch any of the automatically generated files, here is RcppExports.cpp

   // This file was generated by Rcpp::compileAttributes
   // Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393

   #include <RcppArmadillo.h>
   #include <RcppMLPACK.h>
   #include <Rcpp.h>

   using namespace Rcpp;

   // stageMean
   double stageMean(arma::mat data, int stage, int treatment, int marker);
   RcppExport SEXP cme_stageMean(SEXP dataSEXP, SEXP stageSEXP, SEXP
   treatmentSEXP, SEXP markerSEXP) {
   BEGIN_RCPP
        SEXP __sexp_result;
        {
            Rcpp::RNGScope __rngScope;
            Rcpp::traits::input_parameter< arma::mat >::type
   data(dataSEXP );
            Rcpp::traits::input_parameter< int >::type stage(stageSEXP );
            Rcpp::traits::input_parameter< int >::type
   treatment(treatmentSEXP );
            Rcpp::traits::input_parameter< int >::type marker(markerSEXP );
            double __result = stageMean(data, stage, treatment, marker);
            PROTECT(__sexp_result = Rcpp::wrap(__result));
        }
        UNPROTECT(1);
        return __sexp_result;
   END_RCPP
   }
   // condMVNormParams
   Rcpp::List condMVNormParams(arma::vec mu, arma::mat Sigma,
   arma::uvec inds, arma::vec values);
   RcppExport SEXP cme_condMVNormParams(SEXP muSEXP, SEXP SigmaSEXP,
   SEXP indsSEXP, SEXP valuesSEXP) {
   BEGIN_RCPP
        SEXP __sexp_result;
        {
            Rcpp::RNGScope __rngScope;
            Rcpp::traits::input_parameter< arma::vec >::type mu(muSEXP );
            Rcpp::traits::input_parameter< arma::mat >::type
   Sigma(SigmaSEXP );
            Rcpp::traits::input_parameter< arma::uvec >::type
   inds(indsSEXP );
            Rcpp::traits::input_parameter< arma::vec >::type
   values(valuesSEXP );
            Rcpp::List __result = condMVNormParams(mu, Sigma, inds,
   values);
            PROTECT(__sexp_result = Rcpp::wrap(__result));
        }
        UNPROTECT(1);
        return __sexp_result;
   END_RCPP
   }

I was able to compile the same package on a different machine (32bit) but did a clean rebuild. Any Idea what might have gone wrong?

Best,

Kevin
_______________________________________________
Rcpp-devel mailing list
Rcpp-devel@lists.r-forge.r-project.org
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

Reply via email to