C++ Problem beim einbinden der irrKlang.lib in ein Qt-Programm

JetStre4m

Lieutenant
Registriert
Nov. 2007
Beiträge
578
Hi all, ich möchte gerne irrKlang in ein Qt-Programm einbinden. Aus den Codebeispielen von irrKlang hab ich gelesen, dass dazu mit einer .lib gelinkt werden muss. Dass wird via #pragma comment gemacht. In meinem Programm funktioniert das allerdings nicht, ich erhalte die Warnung "ignoring #pragma comment" und den vermutlich daraus resultierenden Fehler "undefined reference to `_imp___ZN8irrklang20createIrrKlangDeviceENS_21E_SOUND_OUTPUT_DRIVEREiPKcS2_'"
betreffend Zeile 9 des folgenden Codes:
Code:
#include "MyWindow.h"
#include "irrKlang_include/irrKlang.h"
using namespace irrklang;

#pragma comment(lib, "lib/libirrKlang.a");

void MyWindow::play_sound(QString *sound)
{
        ISoundEngine* engine = createIrrKlangDevice();
        engine->play2D("../../media/getout.ogg", true);
        engine->drop(); 
        return;
}
Ich würd mich freuen wenn hier jemand ne Idee hat wie man das Ganze zum laufen bekommt...

Gruß tXX
 
Welchen Compiler verwendest du? Pragmas sind compilerspezifische Anweisungen und wenn deiner die Anweisung ignoriert, scheint er damit nichts anfangen zu können. Der von Microsoft (von anderen kann ich nichts berichten) kennt aber #pragma comment(lib, ...) auf jeden Fall, falls du diesen also benutzt, muss es an etwas anderem liegen.
 
Moin,

mich würde interessieren, ob du Windows benutzt.

Wenn du das ganze unter Linux versuchst, könntest du ja mal statt ".a" ".so" versuchen.

Vielleicht funktioniert es ja dann.


Viel Glück.


Gruß,

badday
 
ich benutze gcc bzw g++ unter windows. Das Problem ist, dass ich nicht weiß wie ich die lib sonst dazu linken soll, ich benutz Qt Creator als ide und finde da keine entsprechende funktion zu :(
 
Dann kann das pragma schon mal nicht funktionieren.

Öffne die zum Projekt gehörenende pro Datei und ergänze folgendes: win32:LIBS += path/to/irrKlang.lib
 
OK, das erklärt, warum das #pragma ignoriert wird. Bibliotheken auf diese Weise zum Projekt hinzuzufügen, ist wie gesagt afaik Microsoft und Intel spezifisch und klappt daher beim gcc nicht.

Ich habe unter anderem diese Seite gefunden. Eventuell kannst du damit etwas anfangen, ich persönlich habe mit der Qt-IDE noch nie gearbeitet (und wusste bis heute auch gar nicht, dass es sowas von Trolltech gibt).
 
@boron und ph4nt0: danke eure Tipps scheinen geholfen zu haben, jetzt bekome ich allerdings den sehr vielsagenden Fehler "collect2: ID returned 1 exit status" Oo

und zur Qt-IDE: die ist eigentlich recht gut, der Funktionsumfang ist aber sehr gering:) Der Vorteil ist dass man sofort ohne irgendwelche Einstellungen loslegen kann mit Programmieren
 
Zuletzt bearbeitet:
collect2: ID returned 1 exit status
Das heißt nicht ID sondern ld (kleines L und kleines D). Das ist der Linker vom gcc.
Und das ist nicht die komplette Meldung. Zeige uns mal noch ein paar mehr der letzten Zeilen der Ausgabe.
 
der Fehler mit dem Linker hat sich erledigt, jetzt startet das Programm allerdings nur für einen Sekundenbruchteil und beendet dann mit exitCode -1073741515...
Ergänzung ()

Edit: Jetzt startet das Programm, bleibt beim abspielen aber aus unerfindlichen Gründen stumm ohne eine Fehlermeldung auszuspucken... Ich krieg die Krise:mad:
 
Würde es auch in einem anderen Thread probieren.

Wenn du nicht wissen solltest wie das geht, PN reicht.

Reagiert eigentlich das GUI noch, wenn er stumm bleibt?


Gruß und viel Glück,

badday
 
Warum per PN klären?

Und das Starten in einem eigenen "Thread", sollte sich bei Qt doch wohl über nen SIGNAL und nen SLOT lösen lassen, ohne weiter drüber nachzudenken...
 
Nun, ich weiß nicht in wie weit der Thread-Ersteller mit Qt vertraut ist.

Das Starten lässt sich nach dem Erstellen einer Klasse, die von QThread abgeleitet wird via thread.start(); bewerkstelligen, wobei thread natürlich auch einen anderen Namen haben kann.

Das Starten ist sicher nicht das Problem, ich dachte eher an das Erstellen.

Ich wollte damit auch nicht das Können des Thread-Erstellers in Frage stellen, da ich es nicht einschätzen kann, sondern lediglich meine Hilfe anbieten.

Sollte es zu einem anderen Eindruck gekommen sein, möchte ich mich dafür entschuldigen.


Gruß,

badday
 
An das mit den Threads hab ich sogar auch schon gedacht, aber die gui friert beim (nicht)abspielen nicht ein, alles reagiert ganz normal. Deswegen dachte ich das kommt eher nicht in Frage, oder sagt das nichts aus?

@badday: Danke für das angebot, aber ich hab n tolles Buch zu Qt, da gibts ein ausführliches Kapitel zu Threads drin(was ich bis jetzt noch nicht gelesen hab xD). Und deine Einschätzung meines Wissens war wohl korrekt, ich hab noch nicht besonders viel Erfahrung:D
 
IMHO kann das so auch nicht funktionieren.

Also 1. Solche Sound-APIs bestehen in der Regel aus nicht blockierenden Funktionsaufrufen und sind intern Multithreaded. -> Du brauchst in deiner Anwendung nicht unbedingt einen zweiten Thread.

2. Manual lesen.
Da steht
To start up the sound engine, you simply need to call createIrrKlangDevice(). To shut it down, call IRefCounted::drop():
Das heißt wenn du Playsound aufrufst und direkt danach drop wird das abspielen direkt wieder gekillt. Es wird also nix abgespielt.
3. Examples lesen. http://www.ambiera.com/irrklang/docu/index.html#quickstartexample2

Viel Spaß :-)
 
Zuletzt bearbeitet von einem Moderator:
Och nö wie doof... ich hab den Quelltext aus dem Example kopiert und dabei ne getch()-Schleife gelöscht die dafür sorgt dass das drop verzögert wird. Jetzt funktioniert alles, sowohl das Einbinden der lib als auch das Abspielen. Vielen Dank an Alle :)
ps@wayne: ich hab das manual gelesen das mit dem drop war äh.. eigene Dummheit:D
 
Zuletzt bearbeitet:
War ja auch nicht böse gemeint. Ich wusste ja nicht wieviel Erfahrung du da schon hast.
 

Ähnliche Themen

Zurück
Oben