Building gr-osmosdr from source fails

Marcus Müller marcus.mueller at ettus.com
Thu Jan 31 08:29:31 UTC 2019


in templates, things like "vector of complex of float" used to be
written as 
vector<complex<float> >
with a space between the > and >, because that avoids the ambiguity
with >> (the right-shift operator).

This should be remedied in C++11, i.e. "just work" with or without the
space; I guess the original authors used C++11 by default. CMake makes
such decisions on the fly, depending on (way too) many factors.

I must admit I don't know the language version policy for gr-osmosdr,
but my guess is that setting the C++ standard to C++11 should work;
however, since we're passing std::string around, and that changed its
ABI between C++98 and 11, I'd like to recommend that you use the same
C++ standard as your GNU Radio uses. GNU Radio uses C++11 on the master
branch, or 98 on the maint-3.7 branch. Don't know which one you've
built!

So, as Vasil pointed out, the easiest way out is to simply add these
spaces where necessary, and thus making gr-osmosdr compatible to both
C++ versions

Best regards,
Marcus

On Tue, 2019-01-29 at 23:08 +0200, Vasil Velichkov wrote:
> Hi Gregor,
> On 21/01/2019 16.39, gregor christandl wrote:
> > > gregor at gregor-laptop ~/temp/gr-osmosdr/build $ make 
> > > Scanning dependencies of target gnuradio-osmosdr 
> > > [  2%] Building CXX object lib/CMakeFiles/gnuradio-
> > > osmosdr.dir/source_impl.cc.o 
> > > In file included from /home/gregor/temp/gr-
> > > osmosdr/lib/bladerf/bladerf_source_c.h:26:0, 
> > >                  from /home/gregor/temp/gr-
> > > osmosdr/lib/source_impl.cc:72: 
> > > /home/gregor/temp/gr-osmosdr/lib/bladerf/bladerf_common.h:291:50: 
> > > error: ‘>>’ should be ‘> >’ within a nested template argument
> > > list 
> > >    static std::list<boost::weak_ptr<struct bladerf>> _devs;  /**<
> > > dev cache */ 
> >  
> > I'm running Linux Mint 18.3 Sylvia and am trying to compile for GNU
> > Radio 3.7 (which I installed via pybombs), gcc version 5.4.0
> > 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.11). 
> 
> It seems it can't be compiled with certain gcc versions. You could
> manually apply the following changes from 
> https://github.com/Nuand/bladeRF/issues/684#issuecomment-434389842
> > Quick fix would be to edit bladerf_common.h:291 (and any other
> > lines it errors out on) to change:
> > static std::list<boost::weak_ptr<struct bladerf>> _devs; /**< dev
> > cache */
> > to:
> > static std::list<boost::weak_ptr<struct bladerf> > _devs; /**< dev
> > cache */
> > These three lines in bladerf_common.cc will likely also need
> > changing:
> > bladerf_common.cc:54:std::list<boost::weak_ptr<struct bladerf>>
> > bladerf_common::_devs;
> > bladerf_common.cc:1112:  _devs.push_back(static_cast<boost::weak_pt
> > r<struct bladerf>>(dev));
> > bladerf_common.cc:1120:  std::list<boost::weak_ptr<struct
> > bladerf>>::iterator it(_devs.begin());
>  Or you could try to update your compiler to a more recent version.



More information about the osmocom-sdr mailing list