出于某种原因,R软件包“Boom”无法安装在我的系统(Ubuntu 14.04)上。 R和所有其他软件包都是最新版本(包括“BH”)。 由于“Boom”在CRAN上,所以应该可以预期安装包没有任何问题(例如, 在R上安装软件包,需要OSX的C ++ 11支持 )。 但是,我不知道如何跟踪原因:我的设置可能与“标准”有什么不同,因此软件包不能安装? 在哪里看?
这里是安装日志的违规部分:
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'
尝试一个更新的编译器:安装g++-4.9
并设置
CXX=g++-4.9 CXX1X=g++-4.9
在~/.R/Makevars
或者你的/etc/R/Makeconf
。 我刚刚在工作的机器上重建了Boom(虽然这是一个Ubuntu 15.04到15.10的升级,因为切换到g ++ – 5,需要重建)。