tomneda / DABstar

A DAB receiver with a technical focus forked from Qt-DAB
GNU General Public License v2.0
13 stars 2 forks source link

cannot build under Ubuntu 22.04 LTS #12

Closed andimik closed 6 months ago

andimik commented 6 months ago

For many years, I have been building latest software packages from Jan (and contribute regularly, for example Qt-DAB) and have found your repository recently, so I tried to build DABstar under Ubuntu 22.04 LTS, but I couldn't.

I even have installed qwt 6.2.0 as mentioned in your readme.

[ 21%] Built target dabstar_autogen
[ 21%] Automatic RCC for resources.qrc
[ 22%] Building CXX object CMakeFiles/dabstar.dir/dabstar_autogen/mocs_compilation.cpp.o
In file included from /home/andreas/apps/DABstar/src/spectrum-viewer/spectrum-viewer.h:54,
                 from /home/andreas/apps/DABstar/build/dabstar_autogen/LEASYKLKX4/../../../src/main/radio.h:62,
                 from /home/andreas/apps/DABstar/build/dabstar_autogen/LEASYKLKX4/moc_radio.cpp:10,
                 from /home/andreas/apps/DABstar/build/dabstar_autogen/mocs_compilation.cpp:13:
/usr/include/qwt/qwt_plot_layout.h:84:51: warning: ‘constexpr QFlags<T>::QFlags(QFlags<T>::Zero) [with Enum = QwtPlotLayout::Option; QFlags<T>::Zero = int QFlags<QwtPlotLayout::Option>::Private::*]’ is deprecated: Use default constructor instead [-Wdeprecated-declarations]
   84 |         const QRectF &plotRect, Options options = 0x00 );
      |                                                   ^~~~
In file included from /usr/include/x86_64-linux-gnu/qt5/QtCore/qglobal.h:1299,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/qnamespace.h:43,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs.h:48,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/qobject.h:46,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/QObject:1,
                 from /home/andreas/apps/DABstar/build/dabstar_autogen/2QFTGA3UNE/../../../src/backend/audio/faad-decoder.h:33,
                 from /home/andreas/apps/DABstar/build/dabstar_autogen/2QFTGA3UNE/moc_faad-decoder.cpp:10,
                 from /home/andreas/apps/DABstar/build/dabstar_autogen/mocs_compilation.cpp:2:
/usr/include/x86_64-linux-gnu/qt5/QtCore/qflags.h:123:80: note: declared here
  123 | ("Use default constructor instead") Q_DECL_CONSTEXPR inline QFlags(Zero) noexcept : i(0) {}
      |                                                             ^~~~~~

In file included from /home/andreas/apps/DABstar/build/dabstar_autogen/6MVTDBG76O/../../../src/spectrum-viewer/waterfall-scope.h:38,
                 from /home/andreas/apps/DABstar/build/dabstar_autogen/6MVTDBG76O/moc_waterfall-scope.cpp:10,
                 from /home/andreas/apps/DABstar/build/dabstar_autogen/mocs_compilation.cpp:27:
/home/andreas/apps/DABstar/src/scopes-qwt6/spectrogramdata.h:59:29: error: ‘QwtInterval SpectrogramData::interval(Qt::Axis) const’ marked ‘override’, but does not override
   59 |   [[nodiscard]] QwtInterval interval(Qt::Axis x) const override;
      |                             ^~~~~~~~
make[2]: *** [CMakeFiles/dabstar.dir/build.make:102: CMakeFiles/dabstar.dir/dabstar_autogen/mocs_compilation.cpp.o] Fehler 1
make[1]: *** [CMakeFiles/Makefile2:124: CMakeFiles/dabstar.dir/all] Fehler 2
make: *** [Makefile:136: all] Fehler 2
tomneda commented 6 months ago

@andimik Hello Andi, yes I followed also your contribution to Abracadbra and Qt-DAB (thanks Jan for that, I learnt a lot with his work). Thanks for trying out my project.

I tried to make my build complete warning and (of course) error free. For my developing system (Xubuntu 22.04 LTE) I already made many adaptions, at least using the latest Qt5 (5.15.2).

I needed some code adaption for building my AppImages with a native Ubuntu 20.04 which uses the "build-in" Qt 5.12.8.

I think in a native Ubuntu 22.04 there is a Qt version used between 5.15.2 and 5.12.8 which only should cause some deprecation warnings but not such a failure like you have.

This failure is strange because the mention method interval(Qt::Axis x) is really a overwritten virtual function of the Qwt library. It is first defined in class QwtRasterData (file qwt_raster_data.h:98).

Do you really build with Qwt 6.2.0? https://sourceforge.net/projects/qwt/files/qwt/6.2.0/qwt-6.2.0.zip/download.

There was formerly a Qwt version check in the cmake process but it worked not reliable on my machine, so I removed it.

Nevertheless, I will try to setup a virtual machine with a fresh Ubuntu 22.04 LTS and see whats happen there. Hope I can do this in the later evening today.

old-dab commented 6 months ago

Try to remove libqwt-qt5-dev. It is an older version.

andimik commented 6 months ago

Well I tried both, using all (Ubuntu 22.04 default) Qt and qwt packages I am using for qt-dab. And then installed 6.2.0.

The error keeps the same. But I have no idea, if the 6.2.0 interferes with the installed one or overwrites it. (I am not a programmer).

Try to remove libqwt-qt5-dev. It is an older version.

I will test it.

tomneda commented 6 months ago

@andimik : I could reproduce the issue. It really seems that the Qwt libqwt-qt5-dev from the Ubuntu 22.04-repo is an older Version 6.1.4.

I will try the next days if this version is good to work with DABstar and if yes, making it compatibel with QWT 6.2.0 and this 6.1.4.

Meanwhile: I have not tried it out but it could work to deinstall libqwt-qt5-dev (as @old-dab proposed) with sudo apt remove libqwt-qt5-dev (hope this is correct, I am currently not on Linux) and hopefully the new version of Qwt 6.2.0 is found afterwards if you build and installed that too.

Would be interesting for me: Have you tried out the AppImage (https://github.com/tomneda/DABstar/releases) I provided whether it works on your side?

Thanks for your feedback.

andimik commented 6 months ago

Well, this solved the initial issue, but I still couldn't complete the compilation.

As far as I remember, the problem was in

#include <qwt.h>

Will test the newer commit in the weekend.

andimik commented 6 months ago

The AppImage works under 64bit, but wanted to compile it also on my 32bit Raspberry.

tomneda commented 6 months ago

@andimik Please avoid trying out commits on my development branch, there are seen also as backup for me and could not work (I wrote this also into that commit that it is not working yet). If something works well (or better) I will shiftet it to the main branch and inform you here.

It is very strange: Ubuntu 22.04 LTS provides the Qt 5.15.3. This is newer than the newest commercial-free installable version 5.15.2 which I use on my Xubuntu 22.04. And with this 5.15.3 I got many deprecation warning between Qwt 6.1.4 and Qt which are not easily to handle.

Regarding the "override" problem I only removed that keyword because that base class provides no virtual method to be overrided. So I am not sure if the method is really called finally. For my first run I got segmentations vaults but on an unexpected place. I still have to dig deeper into that.

Regarding Raspberry: I never tried to build my repo on other than my machine (i7-6700K). On my, meanwhile older 6th gen. CPU, it works quite fine and also fluently in debug builds. But I am not sure if it works on a (likely) less powerfull Raspi. Jan seems taking much more effort into Qt-DAB for testing this also on such devices and optimize there. Additionally I implemented things which takes more CPU time, especially in the OFDM decoder where I collect statistic data or doing (several selectable) Soft-Bit-Decision to increase the sensitivy in worse receiving conditions.

But If you want doing the effort on Rasp it would interessting for if it works :-)

andimik commented 6 months ago

I now achieved to build it successfully using e137c491dca4f79d049f455fbd3ddb753d9ed39e

Have deleted all files in the build directory and used ccmake first using the following parameters:

 AIRSPY                           ON
 CMAKE_BUILD_TYPE
 CMAKE_INSTALL_PREFIX             /usr/local/bin
 CONV_IN_FILES                    ON
 DATA_STREAMER                    OFF
 FDK_AAC                          OFF
 HACKRF                           OFF
 LIMESDR                          OFF
 LSB_RELEASE                      /usr/bin/lsb_release
 PLUTO                            OFF
 PTHREADS                         /usr/lib/x86_64-linux-gnu/libpthread.a
 Qt5Core_DIR                      /usr/lib/x86_64-linux-gnu/cmake/Qt5Core
 Qt5Gui_DIR                       /usr/lib/x86_64-linux-gnu/cmake/Qt5Gui
 Qt5Network_DIR                   /usr/lib/x86_64-linux-gnu/cmake/Qt5Network
 Qt5Sql_DIR                       /usr/lib/x86_64-linux-gnu/cmake/Qt5Sql
 Qt5Widgets_DIR                   /usr/lib/x86_64-linux-gnu/cmake/Qt5Widgets
 Qt5Xml_DIR                       /usr/lib/x86_64-linux-gnu/cmake/Qt5Xml
 RTLSDR_LINUX                     ON
 RTLSDR_WIN                       OFF
 RTL_TCP                          ON
 SDRPLAY_V2                       OFF
 SDRPLAY_V3                       OFF
 UHD                              OFF
 USE_FFT                          FFTW3
 USE_HBF                          OFF
 USE_LTO                          OFF
 VITERBI_NEON                     OFF
 VITERBI_SSE                      ON

But as soon as I want to build it for HackRF, then there is a compiler error and it fails:

$ make
[  1%] Automatic MOC and UIC for target dabstar_devices
[  1%] Built target dabstar_devices_autogen
Consolidate compiler generated dependencies of target dabstar_devices
[  2%] Building CXX object src/devices/CMakeFiles/dabstar_devices.dir/dabstar_devices_autogen/mocs_compilation.cpp.o
In file included from /home/andreas/apps/DABstar/build/src/devices/dabstar_devices_autogen/HPAZXAQTMY/moc_hackrf-handler.cpp:10,
                 from /home/andreas/apps/DABstar/build/src/devices/dabstar_devices_autogen/mocs_compilation.cpp:11:
/home/andreas/apps/DABstar/build/src/devices/dabstar_devices_autogen/HPAZXAQTMY/../../../../../src/devices/hackrf-handler/hackrf-handler.h:82:56: error: use of enum ‘hackrf_board_rev’ without previous declaration
   82 | using pfn_hackrf_board_rev_name = const char* (*)(enum hackrf_board_rev board_rev);
      |                                                        ^~~~~~~~~~~~~~~~
/home/andreas/apps/DABstar/build/src/devices/dabstar_devices_autogen/HPAZXAQTMY/../../../../../src/devices/hackrf-handler/hackrf-handler.h:153:3: error: ‘hackrf_board_rev’ does not name a type; did you mean ‘hackrf_board_id’?
  153 |   hackrf_board_rev mRevNo = BOARD_REV_UNDETECTED;
      |   ^~~~~~~~~~~~~~~~
      |   hackrf_board_id
make[2]: *** [src/devices/CMakeFiles/dabstar_devices.dir/build.make:76: src/devices/CMakeFiles/dabstar_devices.dir/dabstar_devices_autogen/mocs_compilation.cpp.o] Fehler 1
make[1]: *** [CMakeFiles/Makefile2:255: src/devices/CMakeFiles/dabstar_devices.dir/all] Fehler 2
make: *** [Makefile:136: all] Fehler 2
tomneda commented 6 months ago

@andimik yes, this is some kind the same problem like with Qwt: I try to use the newest driver for that things. And I own also an HackRf which I want using the newest feature and refactored the HackRf-Driver of Qt-DAB a lot. (I needed a ppm shift which was not working)

Like Qwt 6.2.0 I also build the HackRf driver for myself and uses this description here: https://hackrf.readthedocs.io/en/latest/installing_hackrf_software.html for building and installing.

I copied the relevant content here:

Acquire the source for the HackRF tools from either a release archive or git: git clone https://github.com/mossmann/hackrf.git

Once you have the source downloaded, the host tools can be built as follows:

cd hackrf/host
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig

But maybe you need to deinstall your current HackRf driver because I am not shure if you suffer from the (likely) same problem like with Qwt 6.2.0. Can you please try the above steps? And if it works maybe the same procedure works with Qwt 6.2.0, too?

BTW1: Are the AppImage not working already for your needs? You only need compiling yourself if you want modifying things in my opinion? :grin:

BTW2: If the V2.3.0 builds better than the V2.4.0 I would wonder. The main difference are made in the SDRplay device handler, nothing with Qwt.

andimik commented 6 months ago

Thanks for your hints. Indeed, when I have removed all hackrf packages and compile the latest driver and then compile DABstar, then there is no single compilation warning!

Very very good job, dear Thomas!

tomneda commented 6 months ago

@andimik : I could build a version which seems to work with Qwt 6.1.4. But as it seems that you could manage using Qwt 6.2.0 I would prefer not to add these changes to my mainline as they make the code more unclean and I suppress warnings which I want not to suppress generally.

I make an extra branch for that adaption: https://github.com/tomneda/DABstar/tree/qwt_6.1.4_adaption If you still want to try out, feel free.

tomneda commented 6 months ago

@andimik : forgot to say (in German): "Danke für die Blumen" for that:

... Very very good job, dear Thomas!

:bouquet: :grin:

But back to English, maybe others could be interested in this also:

I try to build DABstar with native Qt and Qwt and I succeeded. The newer Qwt 6.2.0 is still working if wanted. The only disadvantages are the deprecate-warnings as the Qwt 6.1.4 does not really fit to the Qt 5.15.3 (but without side effects). I suppress these warnings on the release build but not on a debug build. So, a normal cmake and make should not show such an warning.

I improved the description for the installing process for Ubuntu in the README.

Look at the newest mainline commit if you want trying this out.

I removed the former side branch "qwt_6.1.4_adaption" as it was a bit faulty and is not more necessary.

Regarding https://github.com/tomneda/DABstar/issues/13#issuecomment-2016582903 I did not looked yet why NEON for the Raspi is not building.

andimik commented 6 months ago

Have pulled latest commit. Building works without any error, and making the installation it ok, too, but then I cannot start the program due to qwt error ...

_resources.cpp.o
[100%] Linking CXX executable dabstar
[100%] Built target dabstar
andreas@E535:~/apps/DABstar/build$ sudo make install
[  1%] Automatic MOC and UIC for target dabstar_devices
[  1%] Built target dabstar_devices_autogen
Consolidate compiler generated dependencies of target dabstar_devices
[ 15%] Built target dabstar_devices
[ 16%] Automatic MOC and UIC for target dabstar_fft
[ 16%] Built target dabstar_fft_autogen
Consolidate compiler generated dependencies of target dabstar_fft
[ 22%] Built target dabstar_fft
[ 23%] Automatic MOC and UIC for target dabstar
[ 23%] Built target dabstar_autogen
Consolidate compiler generated dependencies of target dabstar
[100%] Built target dabstar
Install the project...
-- Install configuration: "Release"
-- Installing: /usr/local/bin/dabstar
-- Set runtime path of "/usr/local/bin/dabstar" to ""
andreas@E535:~/apps/DABstar/build$ cd
andreas@E535:~$ dabstar 
dabstar: error while loading shared libraries: libqwt.so.6.2: cannot open shared object file: No such file or directory

I've again checked the path:

andreas@E535:~/apps/qwt-6.2.0$ sudo make install | grep libqwt
/usr/lib/qt5/bin/qmake -install qinstall -exe ../lib/libqwt.so.6.2.0 /usr/local/qwt-6.2.0/lib/libqwt.so.6.2.0
strip --strip-unneeded /usr/local/qwt-6.2.0/lib/libqwt.so.6.2.0
ln -f -s libqwt.so.6.2.0 /usr/local/qwt-6.2.0/lib/libqwt.so
ln -f -s libqwt.so.6.2.0 /usr/local/qwt-6.2.0/lib/libqwt.so.6
ln -f -s libqwt.so.6.2.0 /usr/local/qwt-6.2.0/lib/libqwt.so.6.2

It's /usr/local/qwt-6.2.0/lib/libqwt.so.6.2, then I copied it into another folder: sudo cp /usr/local/qwt-6.2.0/lib/libqwt.so.6.2 /usr/lib and it worked then.