[C++] Używanie zewnętrznych bibliotek (fftw na MinGW)

0

Chciałbym użyć w programie biblioteki fftw.

Pobrałem ze strony:
http://www.fftw.org/download.html

znalazłem napis przy wersji 3.2.2:

Go here for Windows. (http://www.fftw.org/install/windows.html)

wszedłem zatem na tą stronę i pobrałem odpowiedni plik klikając na swoją wersję:

32-bit version: fftw-3.2.2.pl1-dll32.zip (1.8MB) (ftp://ftp.fftw.org/pub/fftw/fftw-3.2.2.pl1-dll32.zip)

Po rozpakowaniu znalazłem tam kilkanaście plików, wśród nich 3 pliki DLL oraz jeden nagłówkowy:

libfftw3-3.dll
libfftw3-3f.dll
libfftw3-3l.dll
fftw3.h

Skopiowałem te 4 pliki do innego katologu i w nim stworzyłem projekt za pomocą Code::Blocks.

Do projektu dodaje plik nagłówkowy fftw3.h i plik CPP:

#include <stdio.h>
#include <conio.h>
#include "fftw3.h"

int main()
{
  // nic
  return 0;
}

oto co zwrócił mi kompilator:

-------------- Build: Release in fftw_test ---------------
Compiling: main.cpp
Linking console executable: fftw_test.exe
mingw32-g++.exe: no input files
Process terminated with status 1 (0 minutes, 0 seconds)
0 errors, 0 warnings

Dlaczego pojawia mi się komunikat: no input files
i w jaki sposób sprawić, żebym mógł korzystać z biblioteki zamiast męczyć się z jej zainstalowaniem?

Samo programowanie nie sprawia mi kłopotu, jednak ujarzmienie kompilatorów sporo. Nie chcę pisać funkcji liczącej transformatę Fouriera samemu, stąd moje pytanie.

0

Możesz pokazać plik Makefile??

Ja używałem fftw z gcc ale pod linuksem. Ściągnąłem źródła i je skompilowałem. Wtedy otrzymałem bibliotekę:

libfftw3.a (w MinGW to pewnie bedzie *.lib lub *.dll). Wgrałem ją do katalogu gdzie mam projekt i w Makefile, dodałem ją linkerowi :

main: src/main.cpp gnuplot_i.o utils.o psycho.o plotter.o gnames.o wavfile.o filterbank.o
	$(CC) $(CFLAGS) -o main src/main.cpp gnuplot_i.o utils.o psycho.o plotter.o gnames.o wavfile.o filterbank.o <b>lib/libfftw3.a</b>

gdzie pliki *.o tą są pliku utworzone przeze mnie.

0

@mendrek - tego się tak nie robi na miłość boską, tylko tak:
$(CC) $(CFLAGS) -o main src/main.cpp gnuplot_i.o utils.o psycho.o plotter.o gnames.o wavfile.o filterbank.o -Llib -llibfftw3.a

0

Faktycznie. Powinienem to zlinkować poprzez -l.

0

O dziwo tym razem jak zrobiłem projekt od początku, kompilator zwrócił mi takie cos:

-------------- Build: Release in fftw_test ---------------

Compiling: main.cpp
Linking console executable: fftw_test.exe
obj\main.o:main.cpp:(.text+0x1a): undefined reference to `_imp__fftw_malloc'
obj\main.o:main.cpp:(.text+0x4e): undefined reference to `_imp__fftw_plan_dft_1d'
obj\main.o:main.cpp:(.text+0x59): undefined reference to `_imp__fftw_execute'
obj\main.o:main.cpp:(.text+0x62): undefined reference to `_imp__fftw_destroy_plan'
obj\main.o:main.cpp:(.text+0x6b): undefined reference to `_imp__fftw_free'
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 1 seconds)
5 errors, 0 warnings
 

Niestety, nie mogę znaleźć makefile'a wygenerowaego przez Code::Blocks. Widocznie albo go od razu usuwa albo radzi sobie jakoś bez niego. Powyższe rozumiem jako to, że w żadnym pliku projektu nie znajdują się referencje do użytych funkcji, jednak nie wiem w jaki sposób dodać te referencje z biblioteki DLL. Może trzeba zdefiniować coś, aby biblioteka zaczęła korzystać z DLL'a.

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