Dodawanie biblioteki fftw3 do QT Creatora

0

Hej Wszystkim,

Zacznę od przywitania gdyż jestem tu nowy :)

Cały dzień męczę się z dodaniem biblioteki do transformaty Fouriera - "fftw3" do Qt Creatora. Nie jest pewnie wina samej biblioteki tylko coś robię nie tak w dodawaniu. Widziałem podobny wątek na forum i dodałem bibliotekę na tej samej zasadzie w pliku pro

INCLUDEPATH += C:\kurs\fftw\test
LIBS += -L"C:\kurs\fftw\test" -llibfftw3-3
 

I staram się kompilować prosty kod z użyciem biblioteki:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "math.h"
#include "fftw3.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

}

MainWindow::~MainWindow()
{
    delete ui;
}




void MainWindow::fft()
{
    fftw_complex *in, *out;
    fftw_plan p;

    fftwf_alloc_real(10);

}
 

Ale na nic me starania :P cały czas ten sam błąd

 
C:\kurs\waveform\mainwindow.cpp:49: błąd: undefined reference to `_imp__fftwf_alloc_real'

Czy widać tu jakiś błąd na którego nie zwróciłem uwagi?

0

Nie znam biblioteki, ale z tego co wyczytałem tutaj: http://stackoverflow.com/questions/32907229/fftw-visual-studio-2010-compiled-static-library-lnk2001-error-imp-fftwf
to są dwie odmiany biblioteki, a ty próbujesz użyć tej fftwf a linkujesz fftw. Na pewno jest problem z linkowaniem.

0

spróbowałem z inną biblioteką która działała mi pod VS. Z tym samym efektem. Spróbuję jeszcze przeinstalować kompilator

1
LIBS += -L"C:\kurs\fftw\test" -llibfftw3-3

Spróbuj z podwójnymi ukośnikami, albo ukośnikami w drugą stronę. Kiedyś miałem dokładnie z tym taki problem.

0

Podwójne ukośniki, ukośniki w drugą stronę, podwójne ukośniki w drugą stronę - wszystko na nic :(

Spróbuję przeinstalować QT Creator a jak nie to instaluje Linuxa może na nim się uda :)

0

a coś takiego?

LIBS += -L\"C:/kurs/fftw/test\" -llibfftw3-3

albo bez cudzysłowów, jeśli ścieżka nie ma spacji:

LIBS += -LC:/kurs/fftw/test -llibfftw3-3

musi być sposób.

0

Pokaż komunikaty kompilatora, będzie szybciej zamiast zgadywać.

0

Azarien - obydwie podane przez Ciebie opcje dają ten sam efekt

komunikaty z kompilatora:

 17:38:31: Uruchamianie kroków budowania dla projektu test2...
17:38:31: Konfiguracja niezmieniona, krok qmake opuszczony.
17:38:31: Uruchamianie "C:\Qt\Tools\mingw48_32\bin\mingw32-make.exe" 
C:/Qt/Tools/mingw48_32/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory 'C:/test/build-test2-Desktop_Qt_5_2_0_MinGW_32bit-Debug'
g++ -Wl,-subsystem,windows -mthreads -o debug\test2.exe debug/main.o debug/mainwindow.o debug/moc_mainwindow.o  -lglu32 -lopengl32 -lgdi32 -luser32 -lmingw32 -lqtmaind -LC:/kurs/fftw/test -llibfftw3-3 -LC:\Qt\5.2.0\mingw48_32\lib -lQt5Widgetsd -lQt5Guid -lQt5Cored 
debug/mainwindow.o: In function `ZN10MainWindowC2EP7QWidget':
C:\test\build-test2-Desktop_Qt_5_2_0_MinGW_32bit-Debug/../test2/mainwindow.cpp:11: undefined reference to `_imp__fftwf_alloc_real'
collect2.exe: error: ld returned 1 exit status
Makefile.Debug:80: recipe for target 'debug\test2.exe' failed
mingw32-make[1]: *** [debug\test2.exe] Error 1
mingw32-make[1]: Leaving directory 'C:/test/build-test2-Desktop_Qt_5_2_0_MinGW_32bit-Debug'
makefile:34: recipe for target 'debug' failed
mingw32-make: *** [debug] Error 2
17:38:34: Proces "C:\Qt\Tools\mingw48_32\bin\mingw32-make.exe" zakończył się kodem wyjściowym 2.
Błąd budowania / instalowania projektu test2 (zestaw narzędzi: Desktop Qt 5.2.0 MinGW 32bit)
Podczas wykonywania kroku "Make"
17:38:34: Czas trwania: 00:03.
0

No to zamieszałem :) Zrobiłem bibliotekę statyczną i dodałem ją do projektu i wszystko poszło jak powinno. Chodzi o to, że obydwie biblioteki z jakich korzystałem były przekonwertowane z dynamicznych .dll do statycznych .lib przy pomocy VS commad Propt (sugerowałem się opisem ze strony fftw). Wina widocznie leży po stronie konwersji.

Zmieniam swoje pytanie - czy byłby ktoś w stanie odpowiedzieć mi jak mogę dodać do projektu bibliotekę dll lub prawidłowo przekonwertować ją do .lib? Wybaczcie jeżeli popełniam jakiś błąd w rozumowaniu ale to moje pierwsze kroki w programowaniu poza mikrokontrolerami :)

0

To nie jest konwersja DLL do LIB, tylko wygenerowanie biblioteki importowej na podstawie DLL-ki. Taka libka jest potrzebna w fazie linkowania programu, ale do uruchomienia i tak będzie potrzebna zewnętrzna dll-ka.

0

slashe nie w tą stronę.
Nieważne, że Windows w qt separator katalogów ma być po linuksowemu. Poza tym chyba trzeba obciąć numerek na końcu nazwy biblioteki (wersja jest biblioteki dobierana automatycznie).

INCLUDEPATH += C:/kurs/fftw/test
LIBS += -L"C:/kurs/fftw/test" -llibfftw3
0

Azarien to znaczy że dll też powinienem dodać do projektu?

0

Niekoniecznie, ale musi być obecne w katalogu z exekiem by go uruchomić.

0

W programie używasz dwóch precyzji, więc lepiej będzie ujednolicić do jednej z trzech dostępnych:
‘fftw_’
‘fftwf_’
‘fftwl_’

Spróbuj dynamicznie załadować bibliotekę może to pomoże (zaimportuj funkcje).

1 użytkowników online, w tym zalogowanych: 0, gości: 1