[gelöst] vdr-skinsoppalusikka-0.0.3+ lässt sich nicht compilieren

  • Hallo!


    Leider lassen sich bei mir die aktuellen Versionen des vdr-skinsoppalusikka Plugins (ab Version 0.0.3) nicht mehr compilieren. Beim Compilieren bricht er mit folgender Fehlermeldung ab:


    Code
    g++ -fPIC -g -O2 -Wall -Woverloaded-virtual -c -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"skinsoppalusikka"' -I../../../include -I../../../../DVB/include skinsoppalusikka.c
    g++ -fPIC -g -O2 -Wall -Woverloaded-virtual -c -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"skinsoppalusikka"' -I../../../include -I../../../../DVB/include soppalusikka.c
    g++ -fPIC -g -O2 -Wall -Woverloaded-virtual -c -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"skinsoppalusikka"' -I../../../include -I../../../../DVB/include config.c
    g++ -fPIC -g -O2 -Wall -Woverloaded-virtual -c -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"skinsoppalusikka"' -I../../../include -I../../../../DVB/include logo.c
    g++ -fPIC -g -O2 -Wall -Woverloaded-virtual -c -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"skinsoppalusikka"' -I../../../include -I../../../../DVB/include i18n.c
    g++ -fPIC -g -O2 -Wall -Woverloaded-virtual -c -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"skinsoppalusikka"' -I../../../include -I../../../../DVB/include tools.c
    tools.c: In function `char* strncatrealloc(char*, const char*, unsigned int)':
    tools.c:29: error: no matching function for call to `min(size_t, unsigned int&)'
    tools.c:32: error: no matching function for call to `min(size_t, unsigned int&)'
    make: *** [tools.o] Error 1


    Hat jemand eine Idee, was hier nicht stimmen könnte?


    Danke
    Georg

    Edited once, last by schiarch ().

  • Hallo schiarch!


    Bitte gib doch mal etwas mehr Informationen.
    zB verwendete Version von vdr und vdr-skinsoppalusikka (0.0.3 oder 0.0.4).
    Beim vdr bitte auch die verwendeten Use-Flags angeben.


    Zzam

  • Hi Zzam!

    Quote

    Original von Zzam
    zB verwendete Version von vdr und vdr-skinsoppalusikka (0.0.3 oder 0.0.4).
    Beim vdr bitte auch die verwendeten Use-Flags angeben.


    Zzam


    Die verwendete Version von VDR ist 1.3.44 (siehe auch Signatur). Der Fehler tritt !!AB!! Version 0.0.3 auf, als bei 0.0.3, 0.0.4 und 0.0.5.
    VDR und andere Plugins (cdda, channelscan, dvd, femon, ...) lassen sich ohne Probleme compilieren. Ich muß wahrscheinlich noch dazusagen, das ich keine ebuilds für VDR verwende, dann erledigt sich auch das mit den USE Flags, oder?


    Was ich herausgefunden habe ist, das es ab der Version 0.0.3 eine tools.h/.c gibt, in der eine Funktion strncatrealloc() definiert ist (wird aber IMHO nirgends verwendet :rolleyes: )


    Was aber an der "min"-Funktion falsch sein soll, dazu fehlen mir einfach die Programmierkenntnisse. ;(


    Servus
    Georg

  • Hi schiarch!


    Dann ist vieleicht gentoo nicht ganz die richtige Kategorie.
    Zurück zum Thema.


    Kompilierst du die Plugins direkt unterhalb des vdr-Verzeichnisses?
    Wenn nicht, hast du die Pfade im Makefile angepasst (VDRPATH ...)


    Zzam

  • War mir nicht ganz sicher in welche Kategorie das Thema passt. Da aber scheinbar nur ich dieses Problem habe, und bei mir nunmal Gentoo istalliert ist, dachte ich mir, ich probiers mal hier.


    Die Plugins liegen unter $SOURCEDIR/VDR/PLUGINS/src/. Ich habe das Archiv mit tar -xvf enpackt und einen Link auf das Verzeichnis erstellt, sonst habe ich nichts an dem Plugin geändert. (keine Anpassungen im Makefile oder in irgendwelchen anderen Dateien)


    Im Verzeichnis $SOUCEDIR/VDR gibt es eine Make.config, die ausser dem zusätzlichen Eintrag VFAT=1 dem ORIGINAL entspricht. Hilft aber auch nicht wenn ich diese lösche.


    Georg

  • Hallo hd.brummy,
    funktioniert bestens! DANKE! :welle


    Ist/War das jetzt ein Problem auf meinem System, oder woher kommt dieser Fehler?


    Georg

  • PHP
    18:02 < ReneGart> hd_brummy: hab den fehler gefunden, es liegt an der Funktion 'strlen', die als rückgabe den typ
                      'size_t' hat und damit kommt das 'min'-template vom vdr nicht klar.

    ist aus dem log vom IRC #gentoo-vdr,


    Du siehst der patch kommt nicht von mir sondern von Renegart, dem also der Lob gebührt.
    Bzw. den patch hab ich erstellt, also ein klein wenig will ich dann doch haben ;D


    /bin/joerg

  • Quote

    Original von schiarch
    Hallo hd.brummy,
    funktioniert bestens! DANKE! :welle


    Ist/War das jetzt ein Problem auf meinem System, oder woher kommt dieser Fehler?


    Georg


    Ja und nein. Es ist mehr ein Problem mit den unterschiedlichen Architekturen und den daraus resultierenden unterschiedlich großen Variabentypen. Das Plugin konnte ohne den Patch allgemein nicht auf einem amd64 übersetzt werden. ;)

  • Vermutlich liegts daran dass bei 32-bit size_t ein Alias für unsigned int ist, bei 64-bit jedoch nicht, und da max eine generierte Funktion ist bei der Rückgabe und beide Parameter exakt denselben Typ haben (müssen) -> Fehler :)

  • Versteh ich das richtig, dass unsauber bzgl. Variablentypen programmierte Software also in nächster Teit deswegen allgemein ein Prob werden wird?

  • Hi Renegart!


    Danke für die Erklärung und auch nochmal danke für den Patch!


    Georg

  • Quote

    Original von wirbel
    Versteh ich das richtig, dass unsauber bzgl. Variablentypen programmierte Software also in nächster Zeit deswegen allgemein ein Prob werden wird?


    Ich würde eher sagen, das solche Fehler schneller erkannt werden, weil immer mehr Leute unterschiedliche Architekturen 32/64bit einsetzen.
    Die Probs gab's früher auch. Diese sind aber erst bei der Portierung auf eine andere Architektur zum Vorschein gekommen. Da die meisten Programme aber eh für x86 entwickelt wurden und auch nur dort liefen, ist man selten über so was gestolpert.

  • ich habe ein anderes Problem beim Kompilieren, vielelicht kann mir da jemand helfen:


    Code
    In file included from /usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_tree.h:56,
                     from /usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/map:31,
                     from logo.h:12,
                     from skinsoppalusikka.c:12:
    /usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_algobase.h:76: redefinition of `template <class _Tp> void swap(_Tp &, _Tp &)'
    ../../../include/vdr/tools.h:52: `template <class T> void swap(T &, T &)' previously declared here
    /usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3/stl_algobase.h:76: redefinition of `void swap(_Tp &, _Tp &)'
    ../../../include/vdr/tools.h:52: `void swap(T &, T &)' previously defined here
    make[1]: *** [skinsoppalusikka.o] Error 1


    ja, ich weiss :versteck gcc 2.95 ist ein Steinzeitcompiler. Aber für LinVDR brauche ich den halt noch :) Mit gcc 3.0 läuft es auch durch, aber das nützt mir halt nichts ... will ja kompatibel bleiben.

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • @Dr.Seltsam:
    Da hilft im allgemeinen nur umsortieren der Header, primär sollten die Standardheader vor den VDR-Headern included werden...


    Evtl könnte es noch helfen max mit std::max direkt anzusprechen, falls der gcc 2.95 auf sowas Rücksicht nimmt (ich für meinen Teil würde gerne endlich Plugins in Standard-C++'98 coden :mua)

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!