DivXripper 0.1.2 will nicht kompilieren

Post Reply
Message
Author
Peter

DivXripper 0.1.2 will nicht kompilieren

#1 Post by Peter »

Hallo,

ich wollte den vor ein paar Tagen geposteten Kurztip mal testen, jedoch kriege ich bei der Kompilation immer folgende Fehlermeldung:

---------------snip---------------------
convert.o: In function `convertInitOutput(char *)':
/home/pwk/DivXripper-0.1.2/convert.cpp:46: undefined reference to `string_char_traits::copy(char *, char const *, unsigned int)'
/home/pwk/DivXripper-0.1.2/convert.cpp:46: undefined reference to `string_char_traits::move(char *, char const *, unsigned int)'
/home/pwk/DivXripper-0.1.2/convert.cpp:46: undefined reference to `__out_of_range(char const *)'
/home/pwk/DivXripper-0.1.2/convert.cpp:49: undefined reference to `__length_error(char const *)'
convert.o: In function `AttributeInfo::~AttributeInfo(void)':
/usr/include/g++/stl_construct.h(.__malloc_alloc_template<0>::gnu.linkonce.t._S_oom_malloc(unsigned int)+0x1a): undefined reference to `endl(ostream &)'
convert.o: In function `convertInitOutput(char *)':
/home/pwk/DivXripper-0.1.2/convert.cpp:46: undefined reference to `cerr'
/home/pwk/DivXripper-0.1.2/convert.cpp:46: undefined reference to `ostream::operator<<(char const *)'
/home/pwk/DivXripper-0.1.2/convert.cpp:46: undefined reference to `ostream::operator<<(ostream &(*)(ostream &))'
convert.o: In function `AttributeInfo::~AttributeInfo(void)':
/usr/include/g++/stl_construct.h(.BaseError::gnu.linkonce.t.Print(void)+0x19): undefined reference to `cerr'
/usr/include/g++/stl_construct.h(.BaseError::gnu.linkonce.t.Print(void)+0x1e): undefined reference to `ostream::operator<<(char const *)'
convert.o: In function `convertInitOutput(char *)':
/home/pwk/DivXripper-0.1.2/convert.cpp:46: undefined reference to `ostream::operator<<(char const *)'
/home/pwk/DivXripper-0.1.2/convert.cpp:46: undefined reference to `cerr'
/home/pwk/DivXripper-0.1.2/convert.cpp:46: undefined reference to `ostream::operator<<(char const *)'
/home/pwk/DivXripper-0.1.2/convert.cpp:46: undefined reference to `endl(ostream &)'
/home/pwk/DivXripper-0.1.2/convert.cpp:47: undefined reference to `cerr'
/home/pwk/DivXripper-0.1.2/convert.cpp:47: undefined reference to `ostream::operator<<(char const *)'
/home/pwk/DivXripper-0.1.2/convert.cpp:47: undefined reference to `ostream::operator<<(char const *)'
/home/pwk/DivXripper-0.1.2/convert.cpp:47: undefined reference to `ostream::operator<<(ostream &(*)(ostream &))'
/usr/lib/libaviplay.so: undefined reference to `ostream::operator<<(unsigned long)'
/usr/lib/libaviplay.so: undefined reference to `iostream::ios virtual table'
/usr/lib/libaviplay.so: undefined reference to `ostream::operator<<(long)'
/usr/lib/libaviplay.so: undefined reference to `ios virtual table'
/usr/lib/libaviplay.so: undefined reference to `ostream::operator<<(void const *)'
/usr/lib/libaviplay.so: undefined reference to `ostream::operator<<(double)'
/usr/lib/libaviplay.so: undefined reference to `string_char_traits::eos(void)'
/usr/lib/libaviplay.so: undefined reference to `istream::ios virtual table'
/usr/lib/libaviplay.so: undefined reference to `strstream::ios virtual table'
/usr/lib/libaviplay.so: undefined reference to `dec(ios &)'
/usr/lib/libaviplay.so: undefined reference to `strstreambuf::init_dynamic(void *(*)(unsigned int), void (*)(void *), int)'
/usr/lib/libaviplay.so: undefined reference to `streambuf::~streambuf(void)'
/usr/lib/libaviplay.so: undefined reference to `ostream::operator<<(int)'
/usr/lib/libaviplay.so: undefined reference to `ostream::operator<<(unsigned int)'
/usr/lib/libaviplay.so: undefined reference to `strstreambuf::~strstreambuf(void)'
/usr/lib/libaviplay.so: undefined reference to `ostream::ios virtual table'
/usr/lib/libaviplay.so: undefined reference to `string_char_traits::length(char const *)'
/usr/lib/libaviplay.so: undefined reference to `streambuf::streambuf(int)'
/usr/lib/libaviplay.so: undefined reference to `ostream::write(char const *, int)'
/usr/lib/libaviplay.so: undefined reference to `strstreambuf::str(void)'
/usr/lib/libaviplay.so: undefined reference to `hex(ios &)'
/usr/lib/libaviplay.so: undefined reference to `string_char_traits::assign(char &, char const &)'
/usr/lib/libaviplay.so: undefined reference to `cout'
/usr/lib/libaviplay.so: undefined reference to `strstreambuf virtual table'
/usr/lib/libaviplay.so: undefined reference to `strstreambase::ios virtual table'
collect2: ld returned 1 exit status
make: *** [DivXripper] Error 1


Hat jemand eine Idee, wo der Hase begraben ist ?

Sebastian Ude

Re: DivXripper 0.1.2 will nicht kompilieren

#2 Post by Sebastian Ude »

Hat da wer seine libstdc++ mit "strip" allen Symbolen beraubt ?

Peter

Re: DivXripper 0.1.2 will nicht kompilieren

#3 Post by Peter »

root@notch:/home/pwk/DivXripper-0.1.2 > rpm -qi libgpp
Name : libgpp Relocations: (not relocateable)
Version : 2.95.3 Vendor: SuSE GmbH, Nuernberg, Germany
Release : 52 Build Date: Fre 11 Mai 2001 17:27:07 CEST
Install date: Sam 23 Jun 2001 23:06:41 CEST Build Host: amdsimb.suse.de
Group : Development Source RPM: gcc-2.95.3-52.src.rpm
Size : 1830736 License: GPL
Packager : feedback@suse.de
Summary : C++-libraries
Description :
This package contains two libraries, libg++ and libstdc++, and their
respective headers.
Libg++ is the original C++ class library of the GNU project and came into
life long before thre C++ library was standardised. Because of this it
should not be used for new projects. It's only included for older packages
that might need it.
Libstdc++ ist the current C++ library of the GNU C++ compiler. While it is
much closer to the standard, it is far from being complete.
You will find the source code in the package gcc, series zq.

SuSE series: d
root@notch:/home/pwk/DivXripper-0.1.2 > rpm -V libgpp
root@notch:/home/pwk/DivXripper-0.1.2 >



Also meine libstdc++ ist da und in Ordnung. Das einzige was ich mir Vorstellen kann, ist dass der Dumme gcc 3.0 irgendwo noch rumgeistert, denn mit dem konnte ich nicht kompilieren, also habe ich den alten mangels uninstall Option "drübergebügelt "libgpp, gcc, gpp" Neu installiert. Mein eiger C++ code compiliert auch wieder. Was könnte da noch von 3.0 rumgurken ? Oder liegt es an etwas anderem ?

Sebastian Ude

Re: DivXripper 0.1.2 will nicht kompilieren

#4 Post by Sebastian Ude »

@ Peter

Ob du alle Symbole deiner libstd++ mit "strip" wegenommen hast erkennst du garantiert nicht mit RPM, sondern nur wenn du gegen sie linkst.
Für RPM sind die Dateien noch da => alles in Butter.

Nur die Geschichte mit der gestrippten libstd++ kann nicht das Problem sein, wenn du noch eigene C++-Anwendungen übersetzen kannst (kannst du ja).


Das mit dem "ligpp + cpp + gpp über eine selbstkompilierte gcc 3.0-Installation rüberbügeln" ist aber in der Tat etwas kritisch.
Sofern deine selbstgeschriebenen C++-Applikationen compilieren, kann das Compilersystem nicht ganz beschädgt sein, aber ich bin sicher, dass das Problem etwas damit zu tun hat.

Für solche Fälle (Programme die kein uinstall-Target in der Makefile anbieten) ist checkinstall / installwatch & co. einfach noch das Beste.


PS:

An welchen Prefix hattest du den gcc 3.0 installiert ?

Welche Version ergibt ein

gcc -v

?

Compiliere mal eine einfache C++-Anwendung, und mach ein "ldd" auf das generierte Binary.
Welche libstd++ wird verwendet ?

Peter

Re: DivXripper 0.1.2 will nicht kompilieren

#5 Post by Peter »

./configure --prefix=/usr --with-gxx-include-dir=/usr/include/g++ --enable-shared --enable-nls --enable-languages=c,c++

pwk@notch:~ > gcc -v
Reading specs from /usr/lib/gcc-lib/i486-suse-linux/2.95.3/specs
gcc version 2.95.3 20010315 (SuSE)

pwk@notch:~/transcendent/mki > ldd a.out
libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3 (0x40024000)
libm.so.6 => /lib/libm.so.6 (0x4006e000)
libc.so.6 => /lib/libc.so.6 (0x4008d000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Hoffe das hilft irgend jemand weiter !

Peter

Re: DivXripper 0.1.2 will nicht kompilieren

#6 Post by Peter »

@Sebastian
Ist alles in Ordnung oder was ? Weißt du nicht mehr weiter ?

Sebastian Ude

Re: DivXripper 0.1.2 will nicht kompilieren

#7 Post by Sebastian Ude »

@ Peter

Jajaja, ist ja gut <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">.
Ich kann halt leider nicht den ganzen Tag hier im Forum rumhocken.


Also:

Du hast also den gcc 3.0 nach /usr installiert, wenn ich das richtig sehe ?

Das war dann schon der schwerwiegende Fehler - wenn man zwei gcc-Versionen gleichzeitig benutzen will, sollte man sie an unterschiedliche Prefixe installieren.
Ansonsten kommen sich zahlreiche Sachen ins Gehege und Probleme sind vorprogrammiert.


Ich würde an deiner Stelle jetzt folgendes machen:

Alle gcc-Pakete deiner Distribution (inkl. g++, libstdc++ und Headers) deinstallieren.
Dann (sofern es noch existiert) das Verzeichnis "/usr/include/g++" löschen und genau so mit /usr/lib/gcc-lib und /usr/lib/libstdc++* verfahren.

Letzendlich wieder die gcc-Pakete deiner Distribution installieren - und zukünftig in solchen Fällen einen anderen Prefix verwenden und evtl. Programme wie checkinstall einsetzen.

Peter

Re: DivXripper 0.1.2 will nicht kompilieren

#8 Post by Peter »

Muchas Gratias,

jetzt funzt die Sache <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

PS: Ich wollte den gcc ja mit checkinstall installieren, aber das wollte checkinstall nicht (siehe hier irgendwo im Forum)

DANKE

Post Reply