3

For some reason R package 'Boom' fails to install on my system (Ubuntu 14.04). R and all other packages are in their most recent versions (including 'BH'). As 'Boom' is on CRAN it should be expected that the package will install without any problems (e.g. Installing package on R, need C++11 support for OSX). However, I have no idea how to trace the cause: in what way my setup might differ from "the standard" so that the package does not install? Where to look?

Here is the offending part of the install log:

g++ -std=c++11 -I/usr/share/R/include -DNDEBUG -I. -I../inst/include -IBmath -Imath/cephes -DNO_BOOST_THREADS -DNO_BOOST_FILESYSTEM -DADD_ -DRLANGUAGE  -I"/home/mbojan/R/library/3.2/BH/include"   -fpic  -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g -c Models/PosteriorSamplers/DirichletPosteriorSampler.cpp -o Models/PosteriorSamplers/DirichletPosteriorSampler.o
Models/PosteriorSamplers/DirichletPosteriorSampler.cpp: In member function ‘void BOOM::DirichletPosteriorSampler::draw_impl(const std::vector<std::shared_ptr<BOOM::DirichletSampler::DirichletSamplerImpl> >&, const BOOM::Vector&)’:
Models/PosteriorSamplers/DirichletPosteriorSampler.cpp:90:65: error: no matching function for call to ‘std::vector<std::shared_ptr<BOOM::DirichletSampler::DirichletSamplerImpl> >::erase(__gnu_cxx::__normal_iterator<const std::shared_ptr<BOOM::DirichletSampler::DirichletSamplerImpl>*, std::vector<std::shared_ptr<BOOM::DirichletSampler::DirichletSamplerImpl> > >)’
         other_implementations.erase(impl.begin() + which_sampler);
                                                                 ^
Models/PosteriorSamplers/DirichletPosteriorSampler.cpp:90:65: note: candidates are:
In file included from /usr/include/c++/4.8/vector:69:0,
                 from ../inst/include/Models/DataTypes.hpp:24,
                 from ../inst/include/Models/ParamTypes.hpp:22,
                 from ../inst/include/Models/ModelTypes.hpp:22,
                 from ../inst/include/Models/DirichletModel.hpp:22,
                 from ../inst/include/Models/PosteriorSamplers/DirichletPosteriorSampler.hpp:23,
                 from Models/PosteriorSamplers/DirichletPosteriorSampler.cpp:18:
/usr/include/c++/4.8/bits/vector.tcc:134:5: note: std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::erase(std::vector<_Tp, _Alloc>::iterator) [with _Tp = std::shared_ptr<BOOM::DirichletSampler::DirichletSamplerImpl>; _Alloc = std::allocator<std::shared_ptr<BOOM::DirichletSampler::DirichletSamplerImpl> >; std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<std::shared_ptr<BOOM::DirichletSampler::DirichletSamplerImpl>*, std::vector<std::shared_ptr<BOOM::DirichletSampler::DirichletSamplerImpl> > >; typename std::_Vector_base<_Tp, _Alloc>::pointer = std::shared_ptr<BOOM::DirichletSampler::DirichletSamplerImpl>*]
     vector<_Tp, _Alloc>::
     ^
/usr/include/c++/4.8/bits/vector.tcc:134:5: note:   no known conversion for argument 1 from ‘__gnu_cxx::__normal_iterator<const std::shared_ptr<BOOM::DirichletSampler::DirichletSamplerImpl>*, std::vector<std::shared_ptr<BOOM::DirichletSampler::DirichletSamplerImpl> > >’ to ‘std::vector<std::shared_ptr<BOOM::DirichletSampler::DirichletSamplerImpl> >::iterator {aka __gnu_cxx::__normal_iterator<std::shared_ptr<BOOM::DirichletSampler::DirichletSamplerImpl>*, std::vector<std::shared_ptr<BOOM::DirichletSampler::DirichletSamplerImpl> > >}’
/usr/include/c++/4.8/bits/vector.tcc:146:5: note: std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::erase(std::vector<_Tp, _Alloc>::iterator, std::vector<_Tp, _Alloc>::iterator) [with _Tp = std::shared_ptr<BOOM::DirichletSampler::DirichletSamplerImpl>; _Alloc = std::allocator<std::shared_ptr<BOOM::DirichletSampler::DirichletSamplerImpl> >; std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<std::shared_ptr<BOOM::DirichletSampler::DirichletSamplerImpl>*, std::vector<std::shared_ptr<BOOM::DirichletSampler::DirichletSamplerImpl> > >; typename std::_Vector_base<_Tp, _Alloc>::pointer = std::shared_ptr<BOOM::DirichletSampler::DirichletSamplerImpl>*]
     vector<_Tp, _Alloc>::
     ^
/usr/include/c++/4.8/bits/vector.tcc:146:5: note:   candidate expects 2 arguments, 1 provided
make: *** [Models/PosteriorSamplers/DirichletPosteriorSampler.o] Error 1
ERROR: compilation failed for package ‘Boom’
Community
  • 1
  • 1
Michał
  • 2,755
  • 1
  • 17
  • 20

1 Answers1

7

Try a newer compiler: install g++-4.9 and set

CXX=g++-4.9
CXX1X=g++-4.9

in either ~/.R/Makevars or your /etc/R/Makeconf. I just rebuilt Boom yesterday on a machine at work (though that was an Ubuntu 15.04 to 15.10 upgrade which required a rebuild because of the switch to g++-5).

Dirk Eddelbuettel
  • 360,940
  • 56
  • 644
  • 725
  • I installed `g++-4.9` from the `ubuntu-toolchain-r` PPA and set the envars as you suggested. The package almost installs but trips at linking (I think) with `/usr/bin/ld: cannot find -lgfortran`. Is there some other ubuntu package I am missing? Running `gfortran -v` says that it comes from gcc 4.8.5 (I think). Apologies for C++-ignorance! – Michał Mar 16 '16 at 18:28
  • Fortran != C++, but yes, you need that too. See dozens of other questions on that here. The same PPA may have the gfortran package you need. – Dirk Eddelbuettel Mar 16 '16 at 18:44
  • OK, installed `g++-4.9` and `gfortran-4.9` from the above PPA and 'Boom' installs like a charm. Thanks! – Michał Mar 17 '16 at 10:31