[Rcpp-devel] RcppEigen fails on win-builder i386, and a possibly related issue.

François Rousset francois.rousset at umontpellier.fr
Sun May 22 22:48:46 CEST 2016


Hi,

Le 22/05/2016 à 22:16, Dirk Eddelbuettel a écrit :
> On 22 May 2016 at 09:13, Dirk Eddelbuettel wrote:
> |
> | Hi Francois,
> |
> | Thanks for taking the time to track this down and to create an example.
> | I just opened a GitHub issue for it:
> |   https://github.com/RcppCore/RcppEigen/issues/34
> | Feel free to comment there as well.
>
> In that thread on GH, Dan raises a good point:  what actually is the supposed
> error message?  What you have at the end of this long email isn't all that
> clear and _still indirect_: "Running examples in 'minimalTest-Ex.R' failed"
>
> For those of us without a windows 32bit machine at hand, can you (or anybody
> else) actually produce an error message?  Preferably with compiler output?
I never obtained a more useful error message. I have been running the 
CRAN checks routinely on my windows PC both for 32 and 64 bit builds 
without any problem. Compilation itself does not generate any particular 
message. Below are the screen logs on my PC:

=========================================================
==> Rcmd.exe INSTALL --preclean --with-keep.source minimalTest

* installing to library 'C:/Users/francois/Documents/R/win-library/3.4'
* installing *source* package 'minimalTest' ...
** libs

*** arch - i386
"C:/Rtools/mingw_32/bin/"g++  -I"C:/PROGRA~1/R/R-devel/include" -DNDEBUG 
-I"C:/Users/francois/Documents/R/win-library/3.4/Rcpp/include" 
-I"C:/Users/francois/Documents/R/win-library/3.4/RcppEigen/include" 
-I"d:/Compiler/gcc-4.9.3/local330/include"     -O2 -Wall -mtune=core2 -c 
RcppExports.cpp -o RcppExports.o
"C:/Rtools/mingw_32/bin/"g++  -I"C:/PROGRA~1/R/R-devel/include" -DNDEBUG 
-I"C:/Users/francois/Documents/R/win-library/3.4/Rcpp/include" 
-I"C:/Users/francois/Documents/R/win-library/3.4/RcppEigen/include" 
-I"d:/Compiler/gcc-4.9.3/local330/include"     -O2 -Wall -mtune=core2 -c 
spaMM_linear.cpp -o spaMM_linear.o
C:/Rtools/mingw_32/bin/g++ -shared -s -static-libgcc -o minimalTest.dll 
tmp.def RcppExports.o spaMM_linear.o 
-Ld:/Compiler/gcc-4.9.3/local330/lib/i386 
-Ld:/Compiler/gcc-4.9.3/local330/lib -LC:/PROGRA~1/R/R-devel/bin/i386 -lR
installing to 
C:/Users/francois/Documents/R/win-library/3.4/minimalTest/libs/i386

*** arch - x64
"C:/Rtools/mingw_64/bin/"g++  -I"C:/PROGRA~1/R/R-devel/include" -DNDEBUG 
-I"C:/Users/francois/Documents/R/win-library/3.4/Rcpp/include" 
-I"C:/Users/francois/Documents/R/win-library/3.4/RcppEigen/include" 
-I"d:/Compiler/gcc-4.9.3/local330/include"     -O3 -c RcppExports.cpp -o 
RcppExports.o
"C:/Rtools/mingw_64/bin/"g++  -I"C:/PROGRA~1/R/R-devel/include" -DNDEBUG 
-I"C:/Users/francois/Documents/R/win-library/3.4/Rcpp/include" 
-I"C:/Users/francois/Documents/R/win-library/3.4/RcppEigen/include" 
-I"d:/Compiler/gcc-4.9.3/local330/include"     -O3 -c spaMM_linear.cpp 
-o spaMM_linear.o
C:/Rtools/mingw_64/bin/g++ -shared -s -static-libgcc -o minimalTest.dll 
tmp.def RcppExports.o spaMM_linear.o 
-Ld:/Compiler/gcc-4.9.3/local330/lib/x64 
-Ld:/Compiler/gcc-4.9.3/local330/lib -LC:/PROGRA~1/R/R-devel/bin/x64 -lR
installing to 
C:/Users/francois/Documents/R/win-library/3.4/minimalTest/libs/x64
** R
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
*** arch - i386
*** arch - x64
* DONE (minimalTest)
=========================================================
==> Rcmd.exe build minimalTest

* checking for file 'minimalTest/DESCRIPTION' ... OK
* preparing 'minimalTest':
* checking DESCRIPTION meta-information ... OK
* cleaning src
* checking for LF line-endings in source and make files
* checking for empty or unneeded directories
* building 'minimalTest_1.1.3.tar.gz'

==> Rcmd.exe check minimalTest_1.1.3.tar.gz

* using log directory 
'C:/home/francois/travail/stats/CRANhell/minimalTest.Rcheck'
* using R Under development (unstable) (2016-05-14 r70617)
* using platform: x86_64-w64-mingw32 (64-bit)
* using session charset: ISO8859-1
* checking for file 'minimalTest/DESCRIPTION' ... OK
* checking extension type ... Package
* this is package 'minimalTest' version '1.1.3'
* package encoding: UTF-8
* checking package namespace information ... OK
* checking package dependencies ... OK
* checking if this is a source package ... OK
* checking if there is a namespace ... OK
* checking for executable files ... OK
* checking for hidden files and directories ... OK
* checking for portable file names ... OK
* checking whether package 'minimalTest' can be installed ... [21s] OK
* checking installed package size ... OK
* checking package directory ... OK
* checking DESCRIPTION meta-information ... OK
* checking top-level files ... OK
* checking for left-over files ... OK
* checking index information ... OK
* checking package subdirectories ... OK
* checking R files for non-ASCII characters ... OK
* checking R files for syntax errors ... OK
* loading checks for arch 'i386'
** checking whether the package can be loaded ... OK
** checking whether the package can be loaded with stated dependencies 
... OK
** checking whether the package can be unloaded cleanly ... OK
** checking whether the namespace can be loaded with stated dependencies 
... OK
** checking whether the namespace can be unloaded cleanly ... OK
** checking loading without being on the library search path ... OK
* loading checks for arch 'x64'
** checking whether the package can be loaded ... OK
** checking whether the package can be loaded with stated dependencies 
... OK
** checking whether the package can be unloaded cleanly ... OK
** checking whether the namespace can be loaded with stated dependencies 
... OK
** checking whether the namespace can be unloaded cleanly ... OK
** checking loading without being on the library search path ... OK
* checking dependencies in R code ... OK
* checking S3 generic/method consistency ... OK
* checking replacement functions ... OK
* checking foreign function calls ... OK
* checking R code for possible problems ... OK
* checking Rd files ... OK
* checking Rd metadata ... OK
* checking Rd cross-references ... OK
* checking for missing documentation entries ... OK
* checking for code/documentation mismatches ... OK
* checking Rd \usage sections ... OK
* checking Rd contents ... OK
* checking for unstated dependencies in examples ... OK
* checking line endings in C/C++/Fortran sources/headers ... OK
* checking compiled code ... OK
* checking examples ...
** running examples for arch 'i386' ... [0s] OK
** running examples for arch 'x64' ... [0s] OK
* checking PDF version of manual ... OK
* DONE
Status: OK

R CMD check succeeded
===============================================
> Dirk
>   
> | On 22 May 2016 at 12:09, François Rousset wrote:
> | | Hi,
> | |
> | | RcppEigen no longer passes the CRAN checks for Windows i386 architecture:
> | | https://cran.r-project.org/web/checks/check_results_RcppEigen.html
> | | This problem seems to have appeared in the middle of last month,
> | | presumably following some change on CRAN.
> | |
> | | A similar problem appeared at the same time in some packages I maintain,
> | | which link to RcppEigen. For one package, execution stops on a line of
> | | the form
> | | MatrixXd
> | | someMatrix(MatrixXd(nb,nb).setZero().selfadjointView<Lower>().rankUpdate(
> | | anotherMatrix ));
> | | I have reduced the code causing the error to a small reproducible
> | | example, and since I can reproduce the error only on the win-builder
> | | service on CRAN, not on my Windows PC, this example takes the form of a
> | | package 'minimalTest'. It can be downloaded from
> | | http://kimura.univ-montp2.fr/~rousset/minimalTest_1.1.3.tar.gz.
> | |
> | | I hope the following may help in correcting RcppEigen (as I think I can
> | | circumvent the problem in my package), but I am also curious whether I
> | | am missing some obvious error in my code.
> | |
> | | In this small example, the checks fail (on Windows i386 only; the
> | | relevant part of the check log is pasted at the end of this message)
> | | when executing
> | |
> | | mini(14)
> | |
> | | where the mini() function is
> | |
> | | // [[Rcpp::export]]
> | | int mini( int nb ){
> | |    MatrixXd swZ(nb,nb);
> | |    swZ.setZero();
> | |    Rcout <<"Trivial code:
> | | swZ.selfadjointView<Lower>().rankUpdate(swZ):"<<std::endl;
> | |    swZ.selfadjointView<Lower>().rankUpdate(swZ);
> | |    Rcout << "after minimal test. "<<std::endl; // not printed when error
> | | occurs
> | |    return(0);
> | | }
> | |
> | | However, the problem occurs only when two other functions, derived from
> | | more meaningful functions in the original package, are included in the
> | | sources (yet are not called by the tests):
> | |
> | | // [[Rcpp::export]]
> | | List unusedFn1( SEXP XX ) {
> | |    const MappedSparseMatrix<double> X(as<MappedSparseMatrix<double> >(XX));
> | |    SparseQR<SparseMatrix<double, Eigen::ColMajor>,
> | | Eigen::COLAMDOrdering<int> > spQR(X);
> | |    SparseMatrix<double> Q_ap(5,5);
> | |    Q_ap.setZero();
> | |    List out = List::create(Named("Q_ap") = Q_ap);
> | |    return(out);
> | | }
> | |
> | | // [[Rcpp::export]]
> | | SEXP unusedFn2( SEXP ZZ ) {
> | |    const Map<MatrixXd> Z(as<Map<MatrixXd> >(ZZ));
> | |    int c(Z.cols());
> | |    if (c==0) return(wrap(MatrixXd(0,0)));
> | |    MatrixXd bidon(MatrixXd(c,c).setZero());
> | |    MatrixXd
> | | swZ(MatrixXd(c,c).setZero().selfadjointView<Lower>().rankUpdate(bidon.transpose()));
> | |    return(wrap(swZ));
> | | }
> | |
> | | The problem does not occur if either of these two functions is removed
> | | from the sources. I found that I could resolve the problem in my
> | | original package by removing any Eigen::SparseMatrix-related code from
> | | it. Much as in the checks for the small example package, that code was
> | | not called in the checks for my original package.
> | |
> | | The small example package does not contain other C++ or R functions
> | | (except those generated automatically by Rcpp).
> | |
> | | Can anyone make sense of this?
> |
> | The fact that inclusion of other code, which is not called and should be
> | optimized away, is involved is really, really weird.
> |
> | All I can think of so far is maybe some macro going haywire?
> |
> | Dirk
> |
> | | Thanks in advance,
> | |
> | | F.R.
> | |
> | | ==============================================
> | | ** running examples for arch 'i386' ... ERROR
> | | Running examples in 'minimalTest-Ex.R' failed
> | | The error most likely occurred in:
> | |
> | |  > base::assign(".ptime", proc.time(), pos = "CheckExEnv")
> | |  > ### Name: mini
> | |  > ### Title: Test RcppEigen code
> | |  > ### Aliases: mini unusedFn1 unusedFn2
> | |  >
> | |  > ### ** Examples
> | |  >
> | |  > sessionInfo()
> | | R Under development (unstable) (2016-05-21 r70655)
> | | Platform: i386-w64-mingw32/i386 (32-bit)
> | | Running under: Windows Server 2008 x64 (build 6002) Service Pack 2
> | |
> | | locale:
> | | [1] LC_COLLATE=C                 LC_CTYPE=German_Germany.1252
> | | [3] LC_MONETARY=C                LC_NUMERIC=C
> | | [5] LC_TIME=C
> | |
> | | attached base packages:
> | | [1] stats     graphics  grDevices utils     datasets  methods   base
> | |
> | | other attached packages:
> | | [1] minimalTest_1.1.3
> | |
> | | loaded via a namespace (and not attached):
> | | [1] Rcpp_0.12.5
> | |  > mini(14)
> | | Trivial code: swZ.selfadjointView<Lower>().rankUpdate(swZ):
> | | ** running examples for arch 'x64' ... [1s] OK
> | | * checking PDF version of manual ... OK
> | | * DONE
> | | ===============================================
> | | _______________________________________________
> | | Rcpp-devel mailing list
> | | Rcpp-devel at lists.r-forge.r-project.org
> | | https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
> |
> | --
> | http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
> | _______________________________________________
> | Rcpp-devel mailing list
> | Rcpp-devel at lists.r-forge.r-project.org
> | https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>



More information about the Rcpp-devel mailing list