[Gelöst] Problem beim Bauen von taglib oder id3lib

Ich schau es heute Abend nach, mir kommt die Meldung irgendwie bekannt vor (ich meine, ich hätte ein " xx != yy" durch ein "! ( xx == yy)" ersetzt...)

Jörg

EDIT: Schon gefunden:
Code:
joerg@joerg-desktop:~/freetz-trunk-new$ cat make/libs/patches/901-fix_include_algorithm.uclibcxx.patch 
--- include/algorithm	2011-01-20 22:36:10.000000000 +0100
+++ include/algorithm	2011-01-20 22:36:33.000000000 +0100
@@ -46,7 +46,7 @@
 	template<class InputIterator, class T> _UCXXEXPORT
 		InputIterator find(InputIterator first, InputIterator last, const T& value)
 	{
-		while(first !=last && *first != value){
+		while(first !=last && !(*first == value)){
 			++first;
 		}
 		return first;
joerg@joerg-desktop:~/freetz-trunk-new$
 
Zuletzt bearbeitet:
Ich würde eher TagLib::String anpassen und den "!="-Operator implementieren statt uClibcxx für taglib anzupassen...

Edit: irgendwie so (ungetestet)

Code:
--- taglib/toolkit/tlist.h
+++ taglib/toolkit/tlist.h
@@ -222,6 +222,7 @@
      * the same.
      */
     bool operator==(const List<T> &l) const;
+    bool operator!=(const List<T> &l) const;
 
   protected:
     /*
--- taglib/toolkit/tlist.tcc
+++ taglib/toolkit/tlist.tcc
@@ -294,6 +294,12 @@
   return d->list == l.d->list;
 }
 
+template <class T>
+bool List<T>::operator!=(const List<T> &l) const
+{
+  return !operator==(l);
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 // protected members
 ////////////////////////////////////////////////////////////////////////////////
--- taglib/toolkit/tstring.h
+++ taglib/toolkit/tstring.h
@@ -291,6 +291,7 @@
      * returns true if the strings match.
      */
     bool operator==(const String &s) const;
+    bool operator!=(const String &s) const;
 
     /*!
      * Appends \a s to the end of the String.
--- taglib/toolkit/tstring.cpp
+++ taglib/toolkit/tstring.cpp
@@ -480,6 +480,11 @@
   return d == s.d || d->data == s.d->data;
 }
 
+bool String::operator!=(const String &s) const
+{
+  return !operator==(s);
+}
+
 String &String::operator+=(const String &s)
 {
   detach();
 
Zuletzt bearbeitet:
Da hast du natürlich Recht, das wäre wohl eigentlich der "richtige" Weg; obwohl scheinbar die Standard c++Library auch ohne das != auskommt, denn damit übersetzt bekam ich den Fehler meiner Erinnerung nach nicht...
 
Ja, so baut das dann auch.

Gruß
Oliver
 

Anhänge

  • 100-operator_not_equal.taglib.patch.txt
    1.7 KB · Aufrufe: 2
Nochmal drüber nachgedacht finde ich meine Lösung eigentlich doch besser ;-), denn sie passt das Verhalten der uClibcxx Library an das der gnu c++ Library an, die das auch so macht:

Code:
joerg@joerg-desktop:~/freetz-trunk-new$ cat toolchain/target/include/c++/4.4.5/bits/stl_algo.h | sed -n '/ find() for the Input Iterator/,/}/ p'
  /// This is an overload used by find() for the Input Iterator case.
  template<typename _InputIterator, typename _Tp>
    inline _InputIterator
    __find(_InputIterator __first, _InputIterator __last,
	   const _Tp& __val, input_iterator_tag)
    {
      while (__first != __last && !(*__first == __val))
	++__first;
      return __first;
    }
joerg@joerg-desktop:~/freetz-trunk-new$
 
So. Es ist vollbracht. Das Freetz Image wurde erfolgreich mit taglib gebaut und Mediatomb arbeitet nun mit ID3 Tags. Vielen Dank an alle !!!

Gruß @all
Ronny
 
Ich würde eher TagLib::String anpassen und den "!="-Operator implementieren statt uClibcxx für taglib anzupassen...
@er13: Wäre nicht vielleicht doch die Anpassung der uClibcxx an die libstdc++ der "bessere" Weg, auch für andere Programme, die sich daran anlehnen??
 
@er13: Wäre nicht vielleicht doch die Anpassung der uClibcxx an die libstdc++ der "bessere" Weg, auch für andere Programme, die sich daran anlehnen??
Habe mal im C++-Standard nachgeschaut. EqualityComparable verlangt in der Tat nur, dass == implementiert ist. In den Beschreibungen der Algorithmen wird auch nur == verwendet, wird != gebraucht, so wird es als !(==) formuliert, z.B. bei mismatch (Abschnitt 25.1.7):
Code:
!(*i == *(first2 + ( i - first1 )))

Damit ist die Implementierung von uClibc++ nicht ganz Standard-konform und sollte wie von Dir vorgeschlagen korrigiert werden ;-)
 
Ich wollte heute grad mal wieder ein neues Image bauen und war völlig von den Socken, dass taglib jetzt schon im Trunk ist. Soviel Engagement wünschte man sich auch von so manchem kommerziellen Service. Ihr seit echt super!!!!
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.