[Rd] Linking to the BH package introduces CRAN warnings

kaveh vakili.kaveh.email at gmail.com
Wed Nov 5 13:54:52 CET 2014


Dear,

I was expecting this reaction.

Please do not get caught up in the details of the examples,
which I have tried to make as simple as possible for your
benefit.

The main point is that if you remove the lines associated
with

boost/math/distributions/


the warning disappears as well. Ergo,

boost/math/distributions/

is causing the warnings.

Best regards,


On 2014-11-05 13:43, Dirk Eddelbuettel wrote:
> On 5 November 2014 at 00:55, kaveh wrote:
> | Dear all,
> |
> |
> | the simple code in below, when send to the
> | win-builder returns the following (and no other)
> | warning:
> |
> |
> | * checking compiled code ... WARNING
> | File 'quicky/libs/i386/quicky.dll':
> |    Found '_ZSt4cerr', possibly from 'std::cerr' (C++)
> |      Object: 'quicky.o'
> |    Found 'abort', possibly from 'abort' (C), 'runtime' (Fortran)
> |      Object: 'quicky.o'
> | File 'quicky/libs/x64/quicky.dll':
> |    Found '_ZSt4cerr', possibly from 'std::cerr' (C++)
> |      Object: 'quicky.o'
> |    Found 'abort', possibly from 'abort' (C), 'runtime' (Fortran)
> |      Object: 'quicky.o'
> |
> | Compiled code should not call entry points which might terminate R nor
> | write to stdout/stderr instead of to the console, nor the C RNG.
> |
> | See 'Writing portable packages' in the 'Writing R Extensions' manual.
> |
> |
> | Here is the source:
> |
> | #include <algorithm>
> | #include <cstdlib>
> | #include <ctime>
> | #include <functional>
> | #include <fstream>
> | #include <iostream>
> | #include <math.h>
> | #include <time.h>
> | #include <stdio.h>
> | #include <stdlib.h>
> | #include <sstream>
> | #include <vector>
> | #include <random>
> |
> | #include <boost/math/distributions/normal.hpp>
> | #include <boost/math/distributions/chi_squared.hpp>
> |
> | #include <Eigen/Dense>
> |
> | using namespace std;
> | using namespace Eigen;
> | using Eigen::MatrixXd;
> | using Eigen::VectorXd;
> | using Eigen::VectorXi;
> | using Eigen::RowVectorXd;
> |
> |
> | using boost::math::chi_squared;
> | using boost::math::quantile;
> | using boost::math::complement;
> | using boost::math::normal_distribution;
> | using namespace boost::math::policies;
> |
> | typedef policy<
> |        promote_double<true>
> |        > my_policy_norm;
> | typedef policy<
> |        promote_double<true>
> |        > my_policy_chi2;
> |
> | typedef boost::math::normal_distribution<double,my_policy_norm> my_norm;
> | typedef boost::math::chi_squared_distribution<double,my_policy_chi2>
> | my_chi2;
> |
> |
> | VectorXd GetQs(const VectorXd& x){
> |      const int n=x.size();
> |      double mytol=1e-8;
> |      double the_max=x.maxCoeff();
> |      double the_min=x.minCoeff();
> |      double the_rag=(the_max-the_min);
> |      if(the_rag<mytol)    return(x);
> |      if(1.0-the_max<mytol)    return(x);
> |      if(the_min<mytol)    return(x);
> |      VectorXd y=x.array();
> |      for(int i=0;i<n;i++)
> | y(i)=sqrt(quantile(complement(my_chi2(1.0),x(i))));
> |      return(y);
> | }
> | extern "C"{
> |      void quicky(int* rn,double* xi,double* yi){
> |          const int n=*rn;
> |          VectorXd x=Map<VectorXd>(xi,n);
> |          Map<VectorXd>(yi,n)=GetQs(x);
> |      }
> | }
> |
> |
> | So I guess, I should fill a bug report with the
> | BH maintainer?
>
> Err, why? BH does nothing wrong.
>
> You are NOT forced or required to use the Boost distributions header __as R
> comes with the equivalent functionality__ via the Rmath.h header file from R.
> Which has functionality that Rcpp provides to you in scalar and vector form.
>
> And there are probably several dozen examples of using the R distribution
> functions from Rcpp.
>
> So this is _precisely_ what I suggested several mails ago: do your homework,
> identify which header is causing it.  And the obvious next step is then to
> not use the header.
>
> Dirk
>   
>
> | Best regards,
> |
> |
> | On 2014-11-04 23:52, Dirk Eddelbuettel wrote:
> | > Gentlemen,
> | >
> | > On 4 November 2014 at 23:36, kaveh wrote:
> | > | Dear Hadley,
> | > |
> | > | Thank you for this information, maybe the CRAN gods
> | > | will look favourably on this case too,
> | >
> | > You seemed to have missed a point my earlier email tried to stress: Inclusion
> | > of BH does not lead to the warning.
> | >
> | > All this depends on WHICH headers are included, and the OP will need to sort
> | > this out by modifying his code.
> | >
> | > Dirk
> | >
> | > | Best regards,
> | > |
> | > | On 2014-11-04 23:32, Hadley Wickham wrote:
> | > | >>> | However, it seems some of the codes in the BH package
> | > | >>> | might. At any rate, when I include some boost headers such as
> | > | >>> | boost/math/distributions/ through BH, I get the following warnings
> | > | >>> |   when  submitting to the win-builder page:
> | > | >>> |
> | > | >>> |
> | > | >>> |    Found '_ZSt4cerr', possibly from 'std::cerr' (C++)
> | > | >>> |
> | > | >>> |    Found 'abort', possibly from 'abort' (C), 'runtime' (Fortran)
> | > | >>> |
> | > | >>> |    Found '_ZSt4cerr', possibly from 'std::cerr' (C++)
> | > | >>> |
> | > | >>> |    Found 'abort', possibly from 'abort' (C), 'runtime' (Fortran)
> | > | >> You’re kind of out of luck. These functions are both:
> | > | >>   - used by the boost headers
> | > | >>   - forbidden by R, well at least forbidden by CRAN
> | > | > Maaaaybe - I had this note in RSQLite, and CRAN seemed ok with my explanation:
> | > | >
> | > | > * checking compiled code ... NOTE
> | > | >    File ‘/Users/hadley/Documents/databases/RSQLite.Rcheck/RSQLite/libs/RSQLite.so’:
> | > | >      Found ‘___stderrp’, possibly from ‘stderr’ (C)
> | > | >        Object: ‘sqlite-all.o’
> | > | >
> | > | >    This is in C code from the embedded SQLite database.
> | > | >
> | > | >
> | > | > Hadley
> | > | >
> | > |
> | >
> |
>



More information about the R-devel mailing list