Bibliothek in QT Creator verwenden?

Gast #2491415
Lesenswert?
• ▲
▼
Hallo,

ich möchte für ein Programm das ich mit QT Creator in C++ schreibe 
libsndfile (http://www.mega-nerd.com/libsndfile/) verwenden.

Dazu habe ich ein einfaches "Qt-Gui-Anwendung"-Projekt erstellt und über 
"Bibliothek hinzufügen" die .lib welche sich im Projektordner befindet 
hinzugefügt.

Zum testen möchte ich einfach beim anklicken eines Buttons eine 
wav-Datei öffnen:
1
#include "mainwindow.h"
2
#include "ui_mainwindow.h"
3
#include <sndfile.h>
4

5
MainWindow::MainWindow(QWidget *parent) :
6
    QMainWindow(parent),
7
    ui(new Ui::MainWindow)
8
{
9
    ui->setupUi(this);
10
}
11

12
MainWindow::~MainWindow()
13
{
14
    delete ui;
15
}
16

17
void MainWindow::ButtonHandler()
18
{
19
    //create filepointer
20
    SNDFILE*    pst_SourceFile;
21
    SF_INFO*    pst_SourceInfo;
22

23
    //open File
24
    pst_SourceFile = sf_open( "Z:\\Audio_Projekte\\testfiles\\file1.wav" , SFM_READ, pst_SourceInfo) ;
25

26
}

beim übersetzen kommt aber die Fehlermeldung:
1
Fehler:undefined reference to `sf_open'

Jemand eine Idee woran das liegen könnte oder was ich noch machen muss 
um die Bibliothek zu verwenden?


In der Projektdatei wurde übrigens folgender code erstellt durch das 
hinzufügen der Bibliothek:
1
unix:!macx:!symbian|win32: LIBS += -L$$PWD/libsndfile/lib/ -llibsndfile-1
2

3
INCLUDEPATH += $$PWD/libsndfile/include
4
DEPENDPATH += $$PWD/libsndfile/include
5

6
win32: PRE_TARGETDEPS += $$PWD/libsndfile/lib/libsndfile-1.lib
7
else:unix:!macx:!symbian: PRE_TARGETDEPS += $$PWD/libsndfile/lib/liblibsndfile-1.a
8

9
OTHER_FILES += \
10
    libsndfile/lib/libsndfile-1.lib
#2491622
Lesenswert?
• ▲
▼
hm, ich würde mal mit dumpbin oder so etwas nachsehen, wie einerseits 
die externe Referenz in dem aus deinem Programm erzeugten OBJ genau 
heißt, und andererseits wie das Symbol in der lib genau heißt.

Je nach Compilereinstellungen und ob extern "C" oder nicht heißen die 
Symbole jeweils anders; sf_open wird aber auf jeden Fall im Namen 
vorkommen.

Zum erfolgreichen Linken müssen sie aber natürlich exakt übereinstimmen.
Gast #2491644
Lesenswert?
• ▲
▼
@Klaus Wachtler:
So richtig kann ich dir nicht folgen, sry.

Habe bis jetzt fast ausschließlich uC Programmiert und kenne mich mit 
IDEs für PC-Software noch nicht wirklich aus.

Ich habe im Anhang mal das gesamte Projektverzeichnis gezippt und 
angehangen.

@Rolf Magnus:
Ich verwende gerade Win7, könnte es aber später auch mal auf meinem 
Laptop mit Ubuntu testen.
Angehängte Dateien:
#2492338
Lesenswert?
• ▲
▼
Benjamin schrieb:
> @Klaus Wachtler:
> So richtig kann ich dir nicht folgen, sry.

laut der Webseite ist das ganze ein e C-Library.

Jetzt schau bitte in den inkludierten header, ob da sowas wie
1
#ifdef __cplusplus
2
extern "C" {
3
#endif
4

5
... prototypen
6

7

8
#ifdef __cplusplus
9
}
10
#endif
steht.
wenn nicht, dann schreibst du das mal um den include befehl drum rum

edit:
die ifdefs kannst du dann natürlich weglassen, da feststeht, dass es c++ 
ist.
#2492807
Lesenswert?
• ▲
▼
Benjamin schrieb:
> im libsndfile\bin Ordner befindet sich noch eine .dll, muss man die
> vielleicht noch unterbringen ?

das sollte durch das ".lib"-File libsndfile/lib/libsndfile-1.lib 
erledigt werden.

Passt deine lib/dll denn zur QT? Selber Compiler, 32/64 Bit usw.?

Spricht was gegen
#include <QtMultimedia>
bzw warum brauchst du sndfile statt der QT-eigenen Audiofile-Handler?
Gast #2492940
Lesenswert?
• ▲
▼
> Spricht was gegen
> #include <QtMultimedia>
> bzw warum brauchst du sndfile statt der QT-eigenen Audiofile-Handler?

So wie ich das in der Doku von QtMultimedia sehe sind das eher 
Funktionen zur Aufnahme von Sound von einem "input device" also 
Soundkarte/Mikrofon und zur Ausgabe an ein "output device" also 
Soundkarte/Lautsprecher usw.
Das man damit Dateien öffnen kann geht aus der Doku nicht wirklich 
hervor.

Habe auf qt.nokia.com im Bereich "Doc" auch keine anderen APIs finden 
können mit denen man .wav oder andere Audiodateien öffnen kann.

> Passt deine lib/dll denn zur QT? Selber Compiler, 32/64 Bit usw.?
Gute Frage..

auf der Seite von libsndfile gibt es ja 2 Installer für Windows.

Ich habe vorher den "Win64 installer" genommen.
Nun habe ich mal den "Win32 installer" in einem anderen Ordner 
installiert auf auf den verlinkt, und siehe da, es kommt keine 
Fehlermeldung beim compilieren, stattdessen stützt das Programm aber 
direkt nach dem Starten ab.
-.-
1
Starte Z:\Audio_Projekte\Projekte\Test2\Test2-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK__Debug\debug\Test2.exe...Das Programm ist abgestürzt.
2
Z:\Audio_Projekte\Projekte\Test2\Test2-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK__Debug\debug\Test2.exe beendet, Rückgabewert -1073741515
Gast #2493186
Lesenswert?
• ▲
▼
Rolf Magnus schrieb:
> Benjamin schrieb:
>> Habe auf qt.nokia.com im Bereich "Doc" auch keine anderen APIs finden
>> können mit denen man .wav oder andere Audiodateien öffnen kann.
>
> http://developer.qt.nokia.com/doc/qt-4.8/qsound.html

Damit kann ich einen Sound abspielen, einmal oder mehrere mal 
hintereinander. Funktioniert auch, aber nützt mir nichts.

Ich möchte die einzelne Samples haben, (-> FFT -> verarbeiten -> iFFT 
->) und dann wieder als wav abspeichern.
Gast #2493205
Lesenswert?
• ▲
▼
Benjamin schrieb:
> Ich habe vorher den "Win64 installer" genommen.
> Nun habe ich mal den "Win32 installer" in einem anderen Ordner
> installiert auf auf den verlinkt, und siehe da, es kommt keine
> Fehlermeldung beim compilieren, stattdessen stützt das Programm aber
> direkt nach dem Starten ab.

Du musst die "libsndfile-1.dll" entweder in das Verzeichnis deiner .exe 
oder nach windows/system32 kopieren.
#2493206
Lesenswert?
• ▲
▼
Benjamin schrieb:
> Fehlermeldung beim compilieren, stattdessen stützt das Programm aber
> direkt nach dem Starten ab.

Also ohne Button-Press, ohne dass sdnfile-Funktionen aufgerufen wurden?

Meine Vermutung:
die Binärdistribution von sndfile wurde mit dem Microsoft-VC-Compiler 
übersetzt, deine Qt verwendet MinGW (also GCC).

sollte bei "extern "C"" zwar irgendwie zusammenspielen, aber...

Versuch mal für beides denselben Compiler zu verwenden.
(Also entweder QT für VC installieren, oder libsndfile mit dem 
QT-Creator-Eigenen MinGW übersetzen)
Gast #2493250
Lesenswert?
• ▲
▼
ich schrieb:
> Du musst die "libsndfile-1.dll" entweder in das Verzeichnis deiner .exe
> oder nach windows/system32 kopieren.

das scheint das Problem gewesen zu sein, jetzt startet es.

Ich muss zwar erst noch weitere API-Funktonen aufrufen um sicher zu 
gehen das es läuft aber sieht ganz gut aus.

Der Vollständigkeit halber:
Εrnst B✶ schrieb:
> Benjamin schrieb:
>> Fehlermeldung beim compilieren, stattdessen stützt das Programm aber
>> direkt nach dem Starten ab.
>
> Also ohne Button-Press, ohne dass sdnfile-Funktionen aufgerufen wurden?
Ja, ich bekam erst gar keine GUI zu sehen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren