eit.c:394:13: error: 'stime' was not declared in this scope; did you mean 'ctime'?

  • Hallo,


    ich versuche gerade den vdr-2.4.1 für die zukünftige Fedora 32 Version zu kompilieren und bekomme die folgende Fehlermeldung:


    stime () ist in glibc 2.31 veraltet und wurde durch clock_settime () ersetzt. glibc-2.31


    Code
    1. g++ -O3 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fPIC -Werror=overloaded-virtual -Wno-parentheses -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -fPIC -c -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DREMOTE_KBD -DVDR_USER=\"vdr\" -DSDNOTIFY -DLIRC_DEVICE=\"/var/run/lirc/lircd\" -DVIDEODIR=\"/var/lib/vdr/video\" -DCONFDIR=\"/etc/vdr\" -DARGSDIR=\"/etc/vdr/conf.d\" -DCACHEDIR=\"/var/cache/vdr\" -DRESDIR=\"/usr/share/vdr\" -DPLUGINDIR=\"/usr/lib64/vdr\" -DLOCDIR=\"/usr/share/locale\" -I/usr/include/freetype2 -I/usr/include/libpng16 -o eit.o eit.c^M
    2. eit.c: In constructor 'cTDT::cTDT(const u_char*)':^M
    3. eit.c:394:13: error: 'stime' was not declared in this scope; did you mean 'ctime'?^M
    4. 394 | if (stime(&dvbtim) == 0)^M
    5. | ^~~~~^M
    6. | ctime^M


    Hat jemand eine Idee, wie ich das lösen kann ?

    Gruß Marco


    HW: TeVii S471 S/S2, TT6400-S2
    SW: Fedora 31, kernel-5.4.2-300.fc31.x86_64, vdr-2.4.1-2.fc31.x86_64

    The post was edited 2 times, last by marco ().

  • Hast du mal versucht zusätzlich zu #incude <sys/time.h> gemäß https://linux.die.net/man/2/stime #include <time.h> zu nutzen?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Hast du mal versucht zusätzlich zu #incude <sys/time.h> gemäß https://linux.die.net/man/2/stime #include <time.h> zu nutzen?

    das hatte ich bereits mit folgendem Patch in der eit.c versucht, klappt aber nicht.


    Diff
    1. --- a/eit.c.orig 2019-12-12 16:23:42.231599228 +0100
    2. +++ b/eit.c 2019-12-12 16:24:09.093601411 +0100
    3. @@ -13,6 +13,7 @@
    4. #include "eit.h"
    5. #include <sys/time.h>
    6. +#include <time.h>
    7. #include "epg.h"
    8. #include "i18n.h"
    9. #include "libsi/section.h"

    Gruß Marco


    HW: TeVii S471 S/S2, TT6400-S2
    SW: Fedora 31, kernel-5.4.2-300.fc31.x86_64, vdr-2.4.1-2.fc31.x86_64

  • der Unterschied zwischen der Fedora31 und Fedora31 header-Datei time.h ist folgende, es ist die stime() nicht mehr deklariert.


    Gruß Marco


    HW: TeVii S471 S/S2, TT6400-S2
    SW: Fedora 31, kernel-5.4.2-300.fc31.x86_64, vdr-2.4.1-2.fc31.x86_64

  • Versuch mal in deinen compiler flags ein


    -D_SVID_SOURCE

    Alternativ im Quellcode vor dem #include <time.h> ein #define _SVID_SOURCE

  • ich hab's mal mit diesem Patch versucht, gleiche Fehlermeldung

    Gruß Marco


    HW: TeVii S471 S/S2, TT6400-S2
    SW: Fedora 31, kernel-5.4.2-300.fc31.x86_64, vdr-2.4.1-2.fc31.x86_64

  • ich habe mal mit folgendem Patch versucht, den vdr zu kompilieren, das schlägt leider mit folgender Fehlermeldung fehl.

    Quote

    eit.c:25:18: error: missing binary operator before token "("

    25 | #if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_31)

    | ^

    make: *** Deleting file '.dependencies'

    Gruß Marco


    HW: TeVii S471 S/S2, TT6400-S2
    SW: Fedora 31, kernel-5.4.2-300.fc31.x86_64, vdr-2.4.1-2.fc31.x86_64

  • Prima, lässt sich sowohl bei der aktuellen glibc-2.30 und der neuen glibc-2.31 kompilieren. :tup


    Klaus meinte, ich solle ihm einen Patch dazu schicken, machst du das, oder soll ich ihm, deinen Patch schicken ?

    Gruß MartinKG

    Fedora31 x86_64 Gnome Desktop vdr 2.4.1 mit vdr-softhddevice plugin.

    ViewSonic VX3276 HDMI-1 <------------> HDMI NVidia Geforce-gt-1030

    ViewSonic VX3276 HDMI-2 <------------> HDMI Technotrend S2-6400

    The post was edited 1 time, last by MartinKG ().

  • Habe den Patch an Klaus geschickt. Mal abwarten was er dazu sagt.

    Hallo Manuel,


    ein Mitglied der Fedora Mailingliste hat geschrieben, man so hier anstatt timespec ts = {0};

    timespec ts = {}; verwenden


    Gruß Marco


    HW: TeVii S471 S/S2, TT6400-S2
    SW: Fedora 31, kernel-5.4.2-300.fc31.x86_64, vdr-2.4.1-2.fc31.x86_64

  • Guter Punkt. So lernt man immer noch etwas dazu.


    Mir war vor allem das saubere "Initialisieren mit Null" wichtig. Ich habe schonmal erlebt das die "struct" für eine API später um weitere Einträge erweitert wurde, die ich nicht in meinem Code berücksichtigt habe. Das hat echt lange gedauert bis ich drauf gekommen bin das diese Einträge mit Zufallswerten belegt waren und die API deshalb Murks gebaut hat.


    Ich habe ausnahmsweise mal einen Pull-Request zum inoffiziellen VDR-GIT-Repo erstellt um einen Patch ausleiten zu können:
    https://patch-diff.githubuserc…VDR4Arch/vdr/pull/1.patch


    Wenn das so tatsächlich im VDR-Core landen sollte akzeptiere ich dann ausnahmsweise den Pull-Request um das sauber mit Historie rein zu bekommen.

    Wir sind im Jahr 2019 und bald 2020. Ich werde keinen Patch mehr manuell erstellen wenn es einfacher und komfortabler inklusive sauberer Historie auch geht.

  • Fix ist im AUR. Ich habe pkgrel nicht hochgezählt. Es gibt keinen Grund bestehende Pakete neu zu bauen. Der Patch sorgt nur dafür das ein Kompilieren wieder möglich ist.


    BTW: Etwas schade das von Klaus in so einer Situation kein Bugfix-Release (VDR 2.4.2) kommt.