PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : id3lib C, nicht C++



baron_huehnerho
21-10-2005, 19:13
Hallo!

Ich versuche mich gerade an C und will ein kleines Programm schreiben, was ein bischen mit id3-Tags rummacht. Ich dachte nun einfach daran die id3lib zu benutzen.
Das Kurztutorial auf der Homepage sagt mir primär ich bräucht nur die id3/tag.h einzubinden, leider scheint das ein C++-Header zu sein... gcc spuckt Fehler ohne Ende aus.
Ich wollte schon bei C bleiben (ich hasse OOP).
Wie bekomme ich idtags dabei zu stande? (Laut deren Homepage soll ja auch C unterstützt sein?)

Lord Kefir
21-10-2005, 22:11
Hab' keine Ahnung von der id3-lib - aber hast'e die Library beim kompilieren als Parameter mit angegeben? "gcc blabla -lid3lib" oder irgendwas ähnliches...

Mfg, Lord Kefir

SeeksTheMoon
22-10-2005, 09:48
btw: C++ zu benutzen bedeutet nicht zwangsläufig OO zu benutzen...

baron_huehnerho
22-10-2005, 15:44
Ich habe keine Ahnung ob ich mich richtig ausgedrückt habe. id3lib schreibt auf der Projektseite nichts davon, dass ich beim kompilieren -lid3lib anfügen müsste. (Natürlich können die das als "selbstverständlich" deklarieren, k.A.) Leider ändert es nichts an der ausgabe. Wenn ich mir die id3/tag.h ansehe begrüßen mich Klassendefintionen:

// -*- C++ -*-
//.........einige Zeilen zur Lizenz
#ifndef _ID3LIB_TAG_H_
#define _ID3LIB_TAG_H_

#include <id3/id3lib_frame.h>
#include <id3/field.h>
#include <id3/utils.h>//for ID3_PATH_LENGTH

class ID3_Reader;
class ID3_Writer;
class ID3_TagImpl;
class ID3_Tag;

class ID3_CPP_EXPORT ID3_Tag
{
ID3_TagImpl* _impl;
char _tmp_filename[ID3_PATH_LENGTH];
public:
und so weiter. Also die Header, die ich einfügen soll sind ganz klar C++.

Ich paste euch mal den Anfang von dem Compilerfehler:

baron@hlidskjalf ~/Arbeit/C $ gcc -o mp3 mp3.c -lid3lib
In file included from /usr/include/id3/tag.h:32,
from mp3.c:2:
/usr/include/id3/id3lib_frame.h:33: error: Syntaxfehler before "ID3_Field"
/usr/include/id3/id3lib_frame.h:34: error: Syntaxfehler before "ID3_FrameImpl"
/usr/include/id3/id3lib_frame.h:35: error: Syntaxfehler before "ID3_Reader"

Der gleiche Fehler kommt egal ob ich -lid3lib angebe oder nicht und ob ich es weiter vorne schreibe oder nicht.
Ich denke ich benutze die falschen Header für C... nur wo sollten die sein? Ich hab schon mal /usr/include durgestöbert und finde nichts dergleichen...

SeeksTheMoon
22-10-2005, 16:32
da die Lib in C++ geschrieben ist, wie es aussieht, darfst Du natürlich auch nicht den gcc nehmen, sondern den g++.

baron_huehnerho
25-10-2005, 16:56
Dann muss ich doch aber auch wieder C++ schreiben und nicht C. Ich denke wir drehen uns hier gerade leicht im Kreis.

Mein Problem: Wie kann ich id3lib in C benutzen. Nach Aussagen auf der Projektseite sollte es funktionieren:

Multi-language
id3lib aspires to provide interfaces for multiple programming
languages, and currently fully supports both C and C++. A COM
wrapper (id3com) is also supplied allowing VB, VBA, VBScript and
other COM-enabled languages to use the library.

anda_skoa
25-10-2005, 18:19
Vielleicht gibt es da andere Header, praktisch C Bindings
taglib macht das AFAIK so.

Ciao,
_

locus vivendi
25-10-2005, 18:43
Dann muss ich doch aber auch wieder C++ schreiben und nicht C. Ich denke wir drehen uns hier gerade leicht im Kreis.
Warum denn eigentlich nicht? Da ja schon die Bibliothek in C++ geschrieben ist, liegt deren Verwendung für dein Programm doch nahe. Zumal du den einen Grund, warum du C++ nicht benutzen möchtest, ja durch Verwendung der C-Bindings (wahrscheinlich) eh nicht aus dem Wege gehen kannst. Wenn die Id3lib C++ Implementierung/das C++ API Objekt-orientiert ist, dann wird sehr wahrscheinlich auch der C-Wrapper Objekt-orientiert sein. Nur halt in C.