Seite 1 von 1

kompilieren -> vorbis+theora Fehlermeldungen

Verfasst: 9. März 2010 22:03
von listeman
Hallo Leutz,

In meinem kleinem Programm (ne Oberfläche für Streamripper+MPlayer) versuche ich mit dem Shoutcast-Server zu verbinden, um die Liste der Radiostationen zu bekommen. Dabei bin ich auf die Bibliothek "libshout" gestoßen, die das sehr vereinfachen würde. Habe sie also installiert und "shout/shout.h" eingebunden und auch in der .pro-Datei folgende Zeile ergänzt:

Code: Alles auswählen

LIBS += /usr/lib/libshout.a
Beim kompilieren gab er mir ca. 75 "undefined references" die alle mit ogg, spees, vorbis und theora in Verbindung stehen. Nachdem ich die LIBS-Zeile um libogg.a und libspeex.a ergänzt habe, bekomme ich zwar weniger Fehlermeldungen, aber trotz allem noch folgende:

Code: Alles auswählen

/usr/lib/libshout.a(vorbis.o): In function `free_vorbis_data':
(.text+0xe): undefined reference to `vorbis_info_clear'
/usr/lib/libshout.a(vorbis.o): In function `free_vorbis_data':
(.text+0x19): undefined reference to `vorbis_comment_clear'
/usr/lib/libshout.a(vorbis.o): In function `_shout_open_vorbis':
(.text+0x68): undefined reference to `vorbis_info_init'
/usr/lib/libshout.a(vorbis.o): In function `_shout_open_vorbis':
(.text+0x70): undefined reference to `vorbis_comment_init'
/usr/lib/libshout.a(vorbis.o): In function `_shout_open_vorbis':
(.text+0x8f): undefined reference to `vorbis_synthesis_headerin'
/usr/lib/libshout.a(vorbis.o): In function `read_vorbis_page':
(.text+0x11f): undefined reference to `vorbis_synthesis_headerin'
/usr/lib/libshout.a(vorbis.o): In function `read_vorbis_page':
(.text+0x184): undefined reference to `vorbis_packet_blocksize'
/usr/lib/libshout.a(theora.o): In function `free_theora_data':
(.text+0xe): undefined reference to `theora_info_clear'
/usr/lib/libshout.a(theora.o): In function `free_theora_data':
(.text+0x19): undefined reference to `theora_comment_clear'
/usr/lib/libshout.a(theora.o): In function `_shout_open_theora':
(.text+0x68): undefined reference to `theora_info_init'
/usr/lib/libshout.a(theora.o): In function `_shout_open_theora':
(.text+0x70): undefined reference to `theora_comment_init'
/usr/lib/libshout.a(theora.o): In function `_shout_open_theora':
(.text+0x8f): undefined reference to `theora_decode_header'
/usr/lib/libshout.a(theora.o): In function `read_theora_page':
(.text+0x137): undefined reference to `theora_decode_header'
libtheora und libvorbis sind installiert. Natürlich habe ich auch schon google befragt und bin darauf gestoßen, dass es evtl. manchmal an ffmpeg liegt, das ist jedoch installiert.

Mein OS ist Arch Linux. Wäre echt super, wenn mir jemand helfen könnte, da ich moment nicht mehr weiterweiß :)

Danke!!
listeman

Verfasst: 10. März 2010 06:28
von Christian81
Sieht so aus als bräuchte libshout auch libtheora

Verfasst: 10. März 2010 23:49
von listeman
Hm, das hab ich mir auch schon gedacht, jedoch bin ich überfragt wie ich libtheora einbinden kann.
Die Datei "/usr/lib/libtheora.a" existiert nicht und auch ein "#include <theora/theora.h>" in der mainwindow.h bringt keine Änderung...
Irgendeine Idee? libtheora ist natürlich installiert.


PS: Sorry, das ich das das falsche Forum gewählt hab :)

Verfasst: 11. März 2010 06:40
von Christian81
Was sollte ein Header bringen? Du musst schon gegen the theora-lib linken. Welche das ist, wie die heisst etc weiß ich nicht.
Warum linkst du eigentlich gegen die statische libshout?

Verfasst: 15. März 2010 01:23
von listeman
Hm, das ist eine gute Frage.... wenn ich nicht gegen libshout linke, dann kann ich auch libogg und libspeex weglassen, danach frägt er dann nicht mehr :)

Doch nun stehe ich vor dem nächsten Problem. Ich kann partout nirgends den benötigten namespace für die libshout-Funktionen finden. Dabei bringt die Bibliothek sogar eine Beispiel-Datei (in C) mit, jedoch werden darin die Funktionen "einfach verwendet", was bei einem kompilieren der Beispiel-Datei (per gcc) zu denselben "undefined reference"-Fehlermeldungen führt.
Und auch die online-Dokumentation für libshout (http://www.aelius.com/njh/libshout-doc/libshout.html) verwendet die Funktionen einfach, erwähnt nichts bezüglich eines evtl. benötigten namespaces...

Wäre echt super, wenn mir jemand auch noch dabei helfen könnte :D

Viele Grüße
listeman

Verfasst: 15. März 2010 11:19
von franzf
Dann musst du halt die libs selber mit dazu linken...

Code: Alles auswählen

gcc beispieldatei.c -o beispiel -logg -lspeex
wenn nach libogg und libspeex verlangt wird...
Oder halt andere libs, die die symbole enthalten.
Aber dazu sollte eigentlich die Doku die nötigen Infos enthalten.
Hast du denn auch keine libshout.so? Das sollte eigentlich alles andere überflüssig machen.

Verfasst: 24. März 2010 00:03
von listeman
Sorry, das ich erst jetzt antworte...

Ein "LIBS += /usr/lib/libshout.so" brachte die Lösung... jedoch bin ich inzwischen vom gebrauch von libshout abgerückt. Warum nen wrapper benutzen wenn es eine einfache API gibt, die die gewünschten Ergebnisse in schönen xml präsentiert? :)

Danke und Grüße
listeman