KDevelop & arts
-
Ich schreibe ein Programm, das Musik über Arts (KDE) wiedergeben soll. Soweit so gut. Das Programm lässt sich auch kompilieren. Aber beim Linken kriege ich folgendes raus:
Linken der Datei arts_test (libtool) /home/stealth/arts_test/src/arts_test.cpp:40: undefined reference to `KArtsServer::KArtsServer[in-charge](QObject*, char const*)' /home/stealth/arts_test/src/arts_test.cpp:40: undefined reference to `KArtsServer::KArtsServer[in-charge](QObject*, char const*)' /home/stealth/arts_test/src/arts_test.cpp:53: undefined reference to `KDE::PlayObjectFactory::PlayObjectFactory[in-charge](KArtsServer*)' arts_test.o(.text+0x485):/home/stealth/arts_test/src/arts_test.cpp:54: undefined reference to `KDE::PlayObjectFactory::createPlayObject(KURL const&, bool)' arts_test.o(.text+0x4ae):/home/stealth/arts_test/src/arts_test.cpp:55: undefined reference to `KDE::PlayObject::play()' *** Beendet mit Status: 2 ***
es ist Zeile 40 von arts_test.cpp:
m_server = new KArtsServer;
Zeilen 53-55 von arts_test.cpp:
m_factory = new KDE::PlayObjectFactory(m_server); m_playobject = m_factory->createPlayObject( KURL("file:/home/stealth/test.mp3"), true ); m_playobject->play();
Ich glaube es hat irgendwas mit Umgebungsvariablen und KDevelop zu tun. Ich kenne mich damit nicht aus. Kann mir jemand helfen?
-
Du linkst einfach nicht die richtige Library, dass kann daran liegen, dass du entweder eine andere Version der Library benutzt, wo die entsprechenden Symbole (Klassen) nicht vorhanden sind oder du einfach nicht dem Linker sagst, dass er die bestimmte Datei linken soll. (Siehe -l und -L Optionen des GCCs)
-
Ich habe also jetzt bei Projekteintellungen folgendes reingeschrieben: -L/opt/kde3/lib -I/opt/kde3/include/arts
Es kommen die selben Fehler wieder. Ich muss aber nicht mehr den vollen Pfad zu kartsserver.h bei #include angeben.
Ich habe arts 1.3.2 und ein develop rpm dazu (1.3.2). Und die Librarys sind ja auch in /opt/kde3/lib vorhanden.
Was soll ich machen????????
-
du linkst ja immer noch nicht
-
Und was soll ich jetzt machen?
-
-l<library>
-
Obwohl die Datei existiert kriege ich folgende Fehlermeldung:
/usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../../i586-suse-linux/bin/ld: cannot find -l/opt/kde3/lib/libartsc.la
egal welche libraray ich nach -l eintrage.
-
wenn die Datei libfoo.x heißt, dann musst du nur -lfoo benutzen. Siehe auch GCC Doku
-
Danke. Jetzt habe ich artslibrary eingebunden:
-lartskde
Nun kriege ich folgende Fehlermeldung:
/opt/kde3/lib/libartsflow.so: undefined reference to `g_assert_warning' /opt/kde3/lib/libartsflow.so: undefined reference to `g_return_if_fail_warning'
Ich habe nachgeschaut Funktion g_assert_warning() gehört zu glib library, die habe ich auch eingebunden -lglib
Die Fehlermeldung kommt trotzdem. Kann mir jemand helfen?
-
Ich habe im Internet nachgeschaut, in irgendeinem Forum stand, dass es an den älteren glib librarys liegen kann. Ich habe verschiedene Versionen von arts, kdemultimedia, glib, glib2 ausprobiert, der Fehler bleibt. Kann mir bitte jemand helfen. Ein Hinweis vielleicht wo ich die Infos her kriege?
Wenn ich die arts und glib selbst kompilieren würde, würde es das Problem beheben?
-
glib hört sich merkwürdig an, da arts ja KDE ist und das eigentlich kein GTK Zeugs benutzen sollte.
-
Eigentlich funktioniert arts genauso gut unter Gnome.
-
stealth schrieb:
Eigentlich funktioniert arts genauso gut unter Gnome.
das hat damit ja nichts zu tun. Nur wurde es ja für KDE entwickelt, deswegen glaub ich nicht, dass es auf GTK Librarys basiert.
-
haben vielleicht die Leute von SUSE reingepfuscht und die Librarys untereinander falsh verlinkt? Man kann ja in der .la Datei die Abhängigkeiten bestimmen und die anderen libs einbinden (oder?).
-
Also ich habe jetzt alles auf Gentoo (zwei Tage Installation) compilliert und es läuft alles ohne Problemme. (Fck SUSE
)
@kengurelli Danke man ohne dich wäre ich nicht so weit gekommen.