Hallo,
ich versuche den vdr-2.4.6 auf einer zukünftigen Fedora 34 Version mit dem aktuellsten gcc-11.0.0 zu kompilieren, dies schlägt momentan mit
folgenden Meldungen fehl:
Code
hannels.c: In static member function 'static int cChannels::MaxChannelNameLength()':
channels.c:1101:36: error: 'max' was not declared in this scope; did you mean 'std::max'?
1101 | maxChannelNameLength = max(Utf8StrLen(Channel->Name()), maxChannelNameLength);
| ^~~
| std::max
In file included from /usr/include/c++/11/bits/specfun.h:45,
from /usr/include/c++/11/cmath:1927,
from /usr/include/c++/11/math.h:36,
from tools.h:18,
from i18n.h:14,
from config.h:19,
from channels.h:13,
from channels.c:10:
/usr/include/c++/11/bits/stl_algobase.h:300:5: note: 'std::max' declared here
300 | max(const _Tp& __a, const _Tp& __b, _Compare __comp)
| ^~~
channels.c: In static member function 'static int cChannels::MaxShortChannelNameLength()':
channels.c:1113:41: error: 'max' was not declared in this scope; did you mean 'std::max'?
1113 | maxShortChannelNameLength = max(Utf8StrLen(Channel->ShortName(true)), maxShortChannelNameLength);
| ^~~
| std::max
Display More
laut Klaus Schmidinger wurden diese Abfragen damals von Gerald Berwolf bzw. Jasmin Jessich eingebaut,
um die Templates für Plugins abschalten zu können, die die STL benutzen.
Der VDR-2.4.x lässt sich mit folgendem Patch (Notlösung) kompilieren:
Diff
--- vdr-2.4.6/tools.h.orig 2020-12-29 08:13:12.517950149 +0100
+++ vdr-2.4.6/tools.h 2020-12-29 08:13:40.500947147 +0100
@@ -54,16 +54,16 @@
// In case some plugin needs to use the STL and gets an error message regarding one
// of these functions, you can #define DISABLE_TEMPLATES_COLLIDING_WITH_STL before
// including tools.h.
-#if !defined(__STL_CONFIG_H) // for old versions of the STL
-#if !defined(DISABLE_TEMPLATES_COLLIDING_WITH_STL) && !defined(_STL_ALGOBASE_H)
+// #if !defined(__STL_CONFIG_H) // for old versions of the STL
+// #if !defined(DISABLE_TEMPLATES_COLLIDING_WITH_STL) && !defined(_STL_ALGOBASE_H)
template<class T> inline T min(T a, T b) { return a <= b ? a : b; }
template<class T> inline T max(T a, T b) { return a >= b ? a : b; }
-#endif
+// #endif
template<class T> inline int sgn(T a) { return a < 0 ? -1 : a > 0 ? 1 : 0; }
-#if !defined(DISABLE_TEMPLATES_COLLIDING_WITH_STL) && !defined(_MOVE_H)
+// #if !defined(DISABLE_TEMPLATES_COLLIDING_WITH_STL) && !defined(_MOVE_H)
template<class T> inline void swap(T &a, T &b) { T t = a; a = b; b = t; }
-#endif
-#endif
+// #endif
+// #endif
template<class T> inline T constrain(T v, T l, T h) { return v < l ? l : v > h ? h : v; }
~
~
Display More
Gibt es jemand hier im Forum, der mir hier eine saubere Lösung vorschlagen kann im Zusammenhang mit gcc-11.0.0.
Viele Grüße
Martin