vdr-2.4.6 kompiliert mit gcc-11.0.0 nicht

  • Auch das habe ich schon mal in einem Plugin gesehen: vdr-plugin-live

    Wobei da

    Code
    1. hours = string(std::max(0,(int)(2 - hours.size())), '0') + hours;
    2. mins = string(std::max(0,(int)(2 - mins.size())), '0') + mins;

    gemacht wird, sollte also doch eigentlich kein Problem sein.


    Ich würde jetzt mal vorschlagen, die Änderung von #12 zu machen (eventuell vielleicht sogar auch noch ohne DISABLE_TEMPLATES_COLLIDING_WITH_STL) und zu schauen, bei welchen Plugins Probleme auftreten. Dort sollte man dann schauen, ob sich das nicht einfach durch Voranstellen von "std::" lösen lässt. Wäre nett, wenn das jemand mal probieren könnte und hier Bescheid gibt.

    Wo kommt das her, doch nicht etwa aus einer speziellen Implementation der STL?

    Das kann durchaus sein. Hat aber jahrelang funktioniert. Ich gebe natürlich zu, dass das keine "saubere" Lösung war ;-).


    Ich hab jetzt einfach mal mitgenommen das das im VDR eben schon immer so war und dann "never change a running system".

    :thumbup:

  • Die Plugins, die ich nutze (epg2vdr, epgsearch, live, markad, satip) bauen unter Ubuntu 20.04 ohne Probleme.

    VDR
  • Hi,


    vdr-plugin-vnsiserver-1.8.0/streamer.c:34:#define DISABLE_TEMPLATES_COLLIDING_WITH_STL 1


    Code
    1. // work-around for VDR's tools.h
    2. #if VDRVERSNUM < 20400
    3. #define __STL_CONFIG_H 1
    4. #else
    5. #define DISABLE_TEMPLATES_COLLIDING_WITH_STL 1
    6. #endif

    Die Plugins, die ich nutze (epg2vdr, epgsearch, live, markad, satip) bauen unter Ubuntu 20.04 ohne Probleme.

    Ubuntu 20.04 bringt gcc-7 mit max. lässt sich gcc-10 installieren.

    Es geht ja um gcc-11 ...Sorry,wenn ich was überlesen habe.


    Bye

    cu

    TT S2-6400 - saa716x kompilieren unter 20.04(Focal)

  • Es geht so wie ich das verstanden habe um beides: Geht nach der Änderung gcc-7 noch und auch gcc-11. Mein Beitrag bezog sich auf "gcc-7 noch".

    VDR
  • Wäre es denn wirklich so schlimm das DEFINE als Option drin zu lassen?


    Ja, über "using namespace std" scheiden sich die Geister aber zumindest ich hab das genau so im Studium vermittelt bekommen. Beim "normalen" C++-Programmieren braucht man die "std"-Dinger halt ständig und immer ein "std::" davor schreiben kann man machen, muss man aber nicht.


    Ich bin und werde zwar nicht "hardcore Plugin-Entwickler", aber ich fände es trotzdem nicht verkehrt die Option, auch in einem Plugin "using namespace std" machen zu können, zu erhalten.

  • Viele Wege führen nach Rom..


    Selbst ein


    namespace vdr {

    #include <vdr/tools.h>

    }


    int n = vdr::max(..)



    oder


    {

    using vdr::max;

    int n = max(..)

    }

  • Also probiert/compiliert hab ich's jetzt nicht. Ich sag nur macros sind eher C-style als C++ ..

  • Ich hab hier ein Problem mit epgsearch mit gcc-11 (gcc-9 und -10 compilen epgsearch ohne Probleme). Bei gcc-11 (vdr-1.4.7 ist gcc-11 übersetzt und installiert) gibt es eine Meldung, mit deren Kontext ich so gar nichts anfangen kann.

    Es führt bereits das

    conflictcheck.h:30 #include <set>
    zu einem Abbruch.


    Ich hab schon mal probiert davor ein#define DISABLE_TEMPLATES_COLLIDING_WITH_STL zu setzen, ohne Veränderung.


    Hat jemand eine Idee?


    Source ist die neueste aus https://projects.vdr-developer…vdr-plugin-epgsearch.git/
    Habe auch alle älteren Pakete durchprobiert, identischer Abbruch.

  • Hat jemand eine Idee?

    Ich würde mal zwei Dinge versuchen (ich habe noch keine Installation mit gcc-11):

    Code
    1. bool operator()(const cConflictCheckTimerObj* a, const cConflictCheckTimerObj* b) const {
    2. return (a->Compare(*b) < 0);
    3. }

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Ich würde mal zwei Dinge versuchen (ich habe noch keine Installation mit gcc-11):

    Code
    1. bool operator()(const cConflictCheckTimerObj* a, const cConflictCheckTimerObj* b) const {
    2. return (a->Compare(*b) < 0);
    3. }


    Hi seahawk,


    Sehr guter Hinweis, so lässt es sich compilen!!! Vielen Dank!


    Nun muß es nur noch funktionieren, werde die nächsten Tage testen und dann "upstream" reporten.


    Hier nochmal als Patch:



  • kls


    Das hab ich auch noch aber das kompilieren läuft durch. Version 2.5.3

    util.c: In statischer Elementfunktion »static u_int32_t SI::CRC32::crc32(const char*, int, u_int32_t)«:

    util.c:269:17: Warnung: ISO-C++17 erlaubt Speicherklassenangabe »register« nicht [-Wregister]

    269 | register int i;

    | ^

  • Auch das habe ich schon mal in einem Plugin gesehen: vdr-plugin-live

    Hab dazu mal einen pull request bei MarkusE gestartet, dann ist es zumindest schon mal ein Plugin weniger.