Plugins compile error gcc-7!

  • Hallo,


    könnte mal jemand helfen, hab diese Fehler bei compile Plugin mcli & mp3 mit "gcc-7"

    Mit gcc-6(ubuntu zesty) war noch alles Ok.


    **Plugin mp3**

    **Plugin mcli**


    Merci & Gruss

    Wolfgang

  • call of overloaded ‘abs(unsigned int)’ is ambiguous


    Sehr wahrscheinlich geht da etwas schief. Ein abs macht bei einem unsigned int keinerlei Sinn.

    Egal ob es da als 'abs()' mit oder 'std::abs()' steht.

  • das Problem tritt mit gcc 7.3 (Ubuntu 18.04) auch beim Kompilieren von vdr 2.2.0 auf:


    Code
    1. dvbdevice.c: In member function ‘bool cDvbTuner::SetFrontend()’:
    2. dvbdevice.c:848:31: error: call of overloaded ‘abs(unsigned int&)’ is ambiguous
    3. frequency = abs(frequency); // Allow for C-band, where the frequency is less than the LOF


    Die entsprechende Zeile ist in vdr 2.2 und 2.3.9 gleich.


    mit

    Code
    1. frequency = std::abs(frequency);

    kommt die gleiche Fehlermeldung.

    VDR 1: Silverstone LC20, Cougar A300/R, MSI C847MS-E33, passive Asus GT520, Sundtek MediaTV Digital Home (DVB-C/T), KNC One DVB-C, WD10EACS; Atric-IR-Einschalter. SW: Xubuntu 18.04 per SSD
    VDR 2: ACT-620, Asrock B75 Pro3-M, Celeron G540, passive Asus GT610, Cine CT V6, KNC-One DVB-C, Atric-IR-Einschalter. SW: Xubuntu 18.04 per SSD

  • Zitat

    Ein abs macht bei einem unsigned int keinerlei Sinn.

  • was macht dann Sinn?


    eingangs heisst es

    unsigned int frequency = channel.Frequency();


    Frequency() in channels.h ist zwar als int deklariert, aber wenn ich das hier auch auf int ändere, hagelt es Fehlermeldungen wegen unzulässiger Konversion

    VDR 1: Silverstone LC20, Cougar A300/R, MSI C847MS-E33, passive Asus GT520, Sundtek MediaTV Digital Home (DVB-C/T), KNC One DVB-C, WD10EACS; Atric-IR-Einschalter. SW: Xubuntu 18.04 per SSD
    VDR 2: ACT-620, Asrock B75 Pro3-M, Celeron G540, passive Asus GT610, Cine CT V6, KNC-One DVB-C, Atric-IR-Einschalter. SW: Xubuntu 18.04 per SSD

  • Na ja, wenn es *unsigned* ist, dann gibt es keine negativen Werte. Gibt es aber keine negativen Wette, kannst du abs() weglassen und hast exakt den gleichen Effekt.


    Eigentlich liest es sich wie ein klassischer Programmierfehler, bei dem ein signed int später zu einem unsigned wurde ohne darüber nachzudenken.

  • Hi,

    guck dir doch mal den src bei yavdr ansible oder im easyvdr 4 Test ppa an. Das yavdr scheinen ja mehrere schon live zu nutzen, baut also wohl mit 18.04. Das easyvdr baut auch und ist glaub ich startbar, aber noch nicht wirklich nutzbar.


    Ist beides kein Plain VDR!


    MfG,

    Stefan

    Test-VDR1: HP rp5700 Fertigsystem, Core2Duo E6400, 2GB RAM, FF-SD C-2300, nvidia Slim-GT218 x1 | easyVDR 2.0 64Bit
    VDR3: in Rente

    VDR4: MSI G31M2 v2, Digitainer2-Geh., t6963c 6" gLCD, E5200, 2GB, 3TB WD Red, GT730, 2x TT S2-3200; easyVDR 3.5 64bit
    VDR5: Gigabyte
    GA-G31M-S2L, Intel E2140, Zotac GT730 passiv, Digitainer2-Geh., t6963c 6 " gLCD, 2 TB WD Red, 2x TT S2-3200 (an 1 Kabel) easyVDR 3.5 64bit
    VDR6:
    Intel E5200, GT630 passiv, F1 750 GB, t6963c gLCD, 2x TT S2-3200 | easyVDR 3.5 64bit
    VDR-User #1068
    www.easyvdr.de

  • weisst Du, wo die Sourcen liegen?

    VDR 1: Silverstone LC20, Cougar A300/R, MSI C847MS-E33, passive Asus GT520, Sundtek MediaTV Digital Home (DVB-C/T), KNC One DVB-C, WD10EACS; Atric-IR-Einschalter. SW: Xubuntu 18.04 per SSD
    VDR 2: ACT-620, Asrock B75 Pro3-M, Celeron G540, passive Asus GT610, Cine CT V6, KNC-One DVB-C, Atric-IR-Einschalter. SW: Xubuntu 18.04 per SSD

  • Hi,

    der src ist immer im jew. ppa zu finden, daraus wird ja gebaut. Bei easyvdr liegt er zusätzlich der Bequemlichkeit halber in einem git.

    https://launchpad.net/~easyvdr…/4-vdr-unstable/+packages

    Bei View package details gibts dann die Links und dann vom Bionic Build.


    https://www.easy-vdr.de/git/?p…845eb8710d9622d90;hb=HEAD



    https://launchpad.net/~seahawk…+archive/ubuntu/vdr-2.3.9

    gilt ja dasselbe.




    MfG,

    Stefan

    Test-VDR1: HP rp5700 Fertigsystem, Core2Duo E6400, 2GB RAM, FF-SD C-2300, nvidia Slim-GT218 x1 | easyVDR 2.0 64Bit
    VDR3: in Rente

    VDR4: MSI G31M2 v2, Digitainer2-Geh., t6963c 6" gLCD, E5200, 2GB, 3TB WD Red, GT730, 2x TT S2-3200; easyVDR 3.5 64bit
    VDR5: Gigabyte
    GA-G31M-S2L, Intel E2140, Zotac GT730 passiv, Digitainer2-Geh., t6963c 6 " gLCD, 2 TB WD Red, 2x TT S2-3200 (an 1 Kabel) easyVDR 3.5 64bit
    VDR6:
    Intel E5200, GT630 passiv, F1 750 GB, t6963c gLCD, 2x TT S2-3200 | easyVDR 3.5 64bit
    VDR-User #1068
    www.easyvdr.de

  • sehr mysteriös. Den Sourcen nach wurde da nichts verändert. Entweder die Pakete werden derzeit noch gar nicht unter Bionic selbst kompiliert, oder Ubuntu hat in letzter Minute eine neue Compilerversion verteilt.


    In remux.c habe ich das gleiche Problem:

    Code
    1. remux.c:1559:52: error: call of overloaded ‘abs(uint32_t)’ is ambiguous
    2. else if (abs(Delta - 1800) <= 1)


    Delta ist ein uint32_t. Also habe ich da jetzt auch mal das abs rausgenommen. Ebenso bei einer gleichartigen Stelle 4 Zeilen tiefer. Jetzt kompiliert vdr durch.

    VDR 1: Silverstone LC20, Cougar A300/R, MSI C847MS-E33, passive Asus GT520, Sundtek MediaTV Digital Home (DVB-C/T), KNC One DVB-C, WD10EACS; Atric-IR-Einschalter. SW: Xubuntu 18.04 per SSD
    VDR 2: ACT-620, Asrock B75 Pro3-M, Celeron G540, passive Asus GT610, Cine CT V6, KNC-One DVB-C, Atric-IR-Einschalter. SW: Xubuntu 18.04 per SSD

  • Bei VDR4arch wird dieser Patch für den VDR 2.2.0 genutzt: https://github.com/VDR4Arch/vd…r-stable/vdr/PKGBUILD#L22

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • seahawk, Du bist mein Held!


    In https://launchpad.net/~seahawk…dr0~bionic.debian.tar.bz2

    habe ich den Patch vergeblich gesucht. Kompiliert das denn mit vdr 2.3.9? Die Stellen mit dem abs in Verbindung mit unsigned-Daten sind da ja unverändert.

    VDR 1: Silverstone LC20, Cougar A300/R, MSI C847MS-E33, passive Asus GT520, Sundtek MediaTV Digital Home (DVB-C/T), KNC One DVB-C, WD10EACS; Atric-IR-Einschalter. SW: Xubuntu 18.04 per SSD
    VDR 2: ACT-620, Asrock B75 Pro3-M, Celeron G540, passive Asus GT610, Cine CT V6, KNC-One DVB-C, Atric-IR-Einschalter. SW: Xubuntu 18.04 per SSD

  • Die Änderung ist seit dem VDR 2.3.3 in den VDR Sourcen, daher braucht es dafür keinen Patch mehr:

    - Changed 'unsigned' to 'signed' in some places to avoid trouble with abs() in gcc6+ (reported by Derek Kelly).

    Von einem signed Integer kann man dann ohne Zweideutigkeiten mit abs() den Betrag ermitteln.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)