einbinden von Bibliotheken, wie 'id3lib'?
-
Hi Leute,
Ich hätte da mal ne Frage.
Und zwar möchte ich in einem C/C++ Programm ein externes Programm (id3info) benutzen und den Rückgabewert bzw. dessen Ausgabe in meinem Programm weiter verarbeiten. wie mache ich das am besten?
Ich weiß, dass man ein externes Programm mit z.B.:system("id3info --help");
aufrufen kann. Aber wie kann man das halt weiterverarbeiten???
Bin für jede hilfe dankbar!
-
Hi!
Wenn das aufzurufende Programm an stdout schreibt, könntest du soetwas machen (hässlich, aber es sollte klappen)
[/cpp]
system ("program > stdout.log");
// weiter machen und stdout.log lesen
[/cpp]Nachteil: Stderr wird da nicht abgefangen.
Was auch geht, und vielleicht etwas eleganter ist, wäre in deinem Programm zu fork'en (man fork) und in dem fork
dann die stdout von deinem Programm per pipe an dein Programm weiterleiten.
Wenn du das geschafft hast, bitte meldenWill auch haben!
Achja, der Rückgabewert..
Wie man den bekommt weiß ich nicht (gibts da sowas wie errorlevel in dos?), jedoch kannst du einfach prüfen ob
dein Programm erfolgreich war so:bash schrieb:
$ ping -c 1 www.heise.de && clear && echo "netz ist da"
Ich hoffe das hilft dir was weiter..
-
Jo,
also, auf diese idee mit:
system("program > stdout.log");
hätte ich natürlich auch kommen können.
Aber es ging mir eigentlich eher darum die einzelnen tags vernünftig zu verarbeiten!system("id3info > stdout.log");
bringt eine etwas schwer zu verarbeitende schreibweise, zumal der nicht zwischen id3v1 und id3v2 unterscheidet! Bei
system("id3v2 -l song.mp3 > stdout.log");
sieht das schon ganz anders aus! Da wäre das parsen schon einfacher!
Da ist mir dann die Idee gekommen, das man ja mit den devel-paketen vielleicht noch einfacher an die infos rankommt, und tatsächlich gibt es sowas, was ich auch gleich ausprobieren wollte. Leider gibt er mir beim kompilieren ne Fehlermeldung aus, obwohl ich es so gemacht habe, wie es in der anleitung stand.
Bei folgendem Code#include <id3/tag.h> int main() { ID3_Tag myTag("song.mp3"); return 0; }
gibt er mir folgende Fehlermeldung aus
/tmp/ccIN70dB.o(.text+0x23): In function `main': : undefined reference to `ID3_Tag::ID3_Tag[in-charge](char const*)' /tmp/ccIN70dB.o(.text+0x35): In function `main': : undefined reference to `ID3_Tag::~ID3_Tag [in-charge]()' collect2: ld returned 1 exit status
falls, da jemand was drüber weiß, wäre ich dankbar, weil das eigentlich das ist, was ich wollte!
Und die sache mit 'fork' ist glaube ich nicht für meine Sache unbedingt sinnvoll, aber trotzdem danke!
Nunja, das mit den Rückgabewerten, verhält sich glaube ich unter Linux so, dass das Programm nur integer zurückgeben kann, wie eigentlich unter dos auch, deswegen müsste es nur über integer-werte gehen, aber wie soll ich so die infos kriegen die ich halt brauche
?
-
Hi!
Die Fehlermeldung kommt von deinem Linker, und sie sagt dir dass du die benötigte
Librarie nicht eingebunden hast.
Das kannst du dadurch machen, dass du dem gcc per -lbla den Libnamen angibst.
-
Hi!
Ja, das hat zwar die Fehlermeldung beseitigt, dafür ist eine andere dazugekommen!
/usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../libid3.so: undefined reference to `uncompress' /usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../libid3.so: undefined reference to `compress' collect2: ld returned 1 exit status
Verdammt nochmal, ich könnt verzweifeln, warum kann sowas nie gleich funzen?, ich hab sogar versucht die beispiele zu kompilieren die beim id3lib-examples Paket dabei sind, aber da gibt er auch nur Fehlermeldungen aus, woran kann das liegen?
-
Hey vergesst mich mal nicht so schnell
Mein problem ist noch nicht gelöst. Hat denn keiner Erfahrungen damit bestehende Bibliotheken einzubinden?THX für jeden der hier noch antwortet und mir weiterhelfen kann!