Dump978 Add-On Installation Procedures?

That got me a lot further. Updated to gcc-8 (and g++8) from ppa:ubuntu-toolchain-r/test

Also updated my soapysdr to 0.6.1-myriadrf~xenial as well, but now get this error:

g++ -g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -std=c++11 -Wall -Wno-psabi -Werror -O2 -g -Ilibs -Wdate-time -D_FORTIFY_SOURCE=2 -DVERSION=\"3.7.1\"  -c -o soapy_source.o soapy_source.cc
soapy_source.cc: In member function ‘virtual void flightaware::uat::SoapySampleSource::Init()’:
soapy_source.cc:155:83: error: no match for ‘operator=’ (operand types are ‘std::shared_ptr<SoapySDR::Device>’ and ‘<brace-enclosed initializer list>’)
		 device_ = {SoapySDR::Device::make(device_name_), &SoapySDR::Device::unmake};
																				   ^
In file included from /usr/include/c++/8/memory:81,
				 from soapy_source.h:11,
				 from soapy_source.cc:5:
/usr/include/c++/8/bits/shared_ptr.h:309:19: note: candidate: ‘std::shared_ptr<_Tp>& std::shared_ptr<_Tp>::operator=(const std::shared_ptr<_Tp>&) [with _Tp = SoapySDR::Device]’
	   shared_ptr& operator=(const shared_ptr&) noexcept = default;
				   ^~~~~~~~
/usr/include/c++/8/bits/shared_ptr.h:309:19: note:   no known conversion for argument 1 from ‘<brace-enclosed initializer list>’ to ‘const std::shared_ptr<SoapySDR::Device>&’
/usr/include/c++/8/bits/shared_ptr.h:313:2: note: candidate: ‘template<class _Yp> std::shared_ptr<_Tp>::_Assignable<const std::shared_ptr<_Yp>&> std::shared_ptr<_Tp>::operator=(const std::shared_ptr<_Yp>&) [with _Yp = _Yp; _Tp = SoapySDR::Device]’
  operator=(const shared_ptr<_Yp>& __r) noexcept
  ^~~~~~~~
/usr/include/c++/8/bits/shared_ptr.h:313:2: note:   template argument deduction/substitution failed:
soapy_source.cc:155:83: note:   couldn't deduce template parameter ‘_Yp’
		 device_ = {SoapySDR::Device::make(device_name_), &SoapySDR::Device::unmake};
																				   ^
In file included from /usr/include/c++/8/memory:81,
				 from soapy_source.h:11,
				 from soapy_source.cc:5:
/usr/include/c++/8/bits/shared_ptr.h:324:2: note: candidate: ‘template<class _Yp> std::shared_ptr<_Tp>::_Assignable<std::auto_ptr<_Up> > std::shared_ptr<_Tp>::operator=(std::auto_ptr<_Up>&&) [with _Yp = _Yp; _Tp = SoapySDR::Device]’
  operator=(auto_ptr<_Yp>&& __r)
  ^~~~~~~~
/usr/include/c++/8/bits/shared_ptr.h:324:2: note:   template argument deduction/substitution failed:
soapy_source.cc:155:83: note:   couldn't deduce template parameter ‘_Yp’
		 device_ = {SoapySDR::Device::make(device_name_), &SoapySDR::Device::unmake};
																				   ^
In file included from /usr/include/c++/8/memory:81,
				 from soapy_source.h:11,
				 from soapy_source.cc:5:
/usr/include/c++/8/bits/shared_ptr.h:333:7: note: candidate: ‘std::shared_ptr<_Tp>& std::shared_ptr<_Tp>::operator=(std::shared_ptr<_Tp>&&) [with _Tp = SoapySDR::Device]’
	   operator=(shared_ptr&& __r) noexcept
	   ^~~~~~~~
/usr/include/c++/8/bits/shared_ptr.h:333:7: note:   no known conversion for argument 1 from ‘<brace-enclosed initializer list>’ to ‘std::shared_ptr<SoapySDR::Device>&&’
/usr/include/c++/8/bits/shared_ptr.h:341:2: note: candidate: ‘template<class _Yp> std::shared_ptr<_Tp>::_Assignable<std::shared_ptr<_Yp> > std::shared_ptr<_Tp>::operator=(std::shared_ptr<_Yp>&&) [with _Yp = _Yp; _Tp = SoapySDR::Device]’
  operator=(shared_ptr<_Yp>&& __r) noexcept
  ^~~~~~~~
/usr/include/c++/8/bits/shared_ptr.h:341:2: note:   template argument deduction/substitution failed:
soapy_source.cc:155:83: note:   couldn't deduce template parameter ‘_Yp’
		 device_ = {SoapySDR::Device::make(device_name_), &SoapySDR::Device::unmake};
																				   ^
In file included from /usr/include/c++/8/memory:81,
				 from soapy_source.h:11,
				 from soapy_source.cc:5:
/usr/include/c++/8/bits/shared_ptr.h:349:2: note: candidate: ‘template<class _Yp, class _Del> std::shared_ptr<_Tp>::_Assignable<std::unique_ptr<_Up, _Ep> > std::shared_ptr<_Tp>::operator=(std::unique_ptr<_Up, _Ep>&&) [with _Yp = _Yp; _Del = _Del; _Tp = SoapySDR::Device]’
  operator=(unique_ptr<_Yp, _Del>&& __r)
  ^~~~~~~~
/usr/include/c++/8/bits/shared_ptr.h:349:2: note:   template argument deduction/substitution failed:
soapy_source.cc:155:83: note:   couldn't deduce template parameter ‘_Yp’
		 device_ = {SoapySDR::Device::make(device_name_), &SoapySDR::Device::unmake};
																				   ^
<builtin>: recipe for target 'soapy_source.o' failed

Which repository are you actually compiling?
I believe for soapy-sdr 0.6 you need to checkout the dev branch

git checkout dev
git pull

I was using the myriadrf ppa for the packages. I’ll try and get it from git, build, install and try again.

That’s fine.

I meant the dump978 source from github.
The compilation errors got fixed in the devbranch.

The master branch of dump978-fa is fine for 0.5-2
But for using soapysdr 0.6 with dump978, you need the dump978 dev branch.

Yay! Got further. I’m so close now. Seems like I need a newer version of libboost-regex. What’s the version you build with normally?

g++ -g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -std=c++11 -Wall -Wno-psabi -Werror -O2 -g -Ilibs -Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now dump978_main.o socket_output.o message_dispatch.o fec.o libs/fec/init_rs_char.o libs/fec/decode_rs_char.o sample_source.o soapy_source.o convert.o demodulator.o uat_message.o -o dump978-fa -lboost_system -lboost_program_options -lboost_regex -lboost_filesystem -lpthread -lSoapySDR
dump978_main.o: In function `boost::cpp_regex_traits<char>::transform[abi:cxx11](char const*, char const*) const':
/usr/include/boost/regex/v4/cpp_regex_traits.hpp:961: undefined reference to `boost::re_detail::cpp_regex_traits_implementation<char>::transform[abi:cxx11](char const*, char const*) const'
dump978_main.o: In function `boost::cpp_regex_traits<char>::transform_primary[abi:cxx11](char const*, char const*) const':
/usr/include/boost/regex/v4/cpp_regex_traits.hpp:965: undefined reference to `boost::re_detail::cpp_regex_traits_implementation<char>::transform_primary[abi:cxx11](char const*, char const*) const'
collect2: error: ld returned 1 exit status

I rebuilt boost 1.70 from scratch and was able to build dump978 now. skyview978 doesn’t build now:

g++ -g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -std=c++11 -Wall -Wno-psabi -Werror -O2 -g -Ilibs -Wdate-time -D_FORTIFY_SOURCE=
2 -DVERSION=\"3.7.2~dev\"  -c -o skyview978_main.o skyview978_main.cc
skyview978_main.cc: In function ‘int realmain(int, char**)’:
skyview978_main.cc:106:48: error: ‘*((void*)(& location)+8).std::pair<double, double>::second’ may be used uninitialized in this function [-Werror=maybe-un
initialized]
     boost::optional<std::pair<double, double>> location = boost::none;
                                                ^~~~~~~~
skyview978_main.cc:106:48: error: ‘*((void*)(& location)+8).std::pair<double, double>::first’ may be used uninitialized in this function [-Werror=maybe-uni
nitialized]
cc1plus: all warnings being treated as errors

Being able to select the device by serial isn’t very useful, especially since the dongles FlightAware sells ALL have a serial number of 00001000. I have 2 of them, so this is my listing. How can I choose the right one for dump978-fa?

Found 2 device(s):
  0:  Realtek, RTL2832U, SN: 00001000
  1:  Realtek, RTL2832U, SN: 00001000

You can change the serial numbers, eg ending in 1090 and 978. There are instructions to do this on this forum. I think @abcd567 himself has written about it

Edit: How to Change Serial Number of Dongle - ADSB 1090 + UAT 978 Dongles Plugged Into Same Pi

Oh, good to know, thanks!

Also, to answer my own question, you can choose a device by adding “rtl=index” instead of “serial=xxx”

1 Like

This is a particularly frustrating false positive that’s been very hard to nail down (it seems to depend on exact compiler version, boost version, architecture…)

Above old post recomends using serial numbers 00000000 and 00000001

However it is much better to use serial numbers 00001090 and 00000978, which make it easy to identify. Please see this newer post:

How-to Serialize Dongles for ES1090 + UAT978

1 Like

Does this workaround have combinations that don’t build?

-    boost::optional<std::pair<double, double>> location = boost::none;
+    boost::optional<std::pair<double, double>> location = boost::make_optional(false, std::make_pair(0.0, 0.0));

Fix maybe-unitialized compilation error for the location variable by wiedehopf · Pull Request #2 · flightaware/dump978 · GitHub

That’s half the problem - I don’t know, I don’t have build environments for the failing cases.

Let’s check this:

cd /tmp
git clone --single-branch --branch dev2 https://github.com/wiedehopf/dump978.git
cd dump978
dpkg-buildpackage -b

What i meant:

  • fixes the problem for at least one environment
  • doesn’t create other problems on the environments you are testing on
  • really shouldn’t hurt anything looking at the code change

Anyway as you see above you’ll see soon if it fixes the problem for him as well.

Yup, that fixes it. Thanks!

I had a couple other problems, and was able to work around/solve them:

  • piaware main repo is missing building of faup978 for xenial (fairly easy to fix)
  • Manually building boost from source without a proper debian package means the shared library checks in piaware builder and dump978 builder complain about missing dependencies for boost packages (I cheated and disabled shared library checking in the builders)

So, I’m up and running with 3.7.1 on Xenial now. Thanks for all your help!

Also true for bionic. I unsuccessfully tried to correct it, and compiled as stretch instead. That worked.