Forum: PC-Programmierung FFTW: Probleme mit Linker


von Signal (Gast)


Lesenswert?

Mit Microsoft Visual Studio 2008 C++ möchte ich eine FFT von einem 
Zeitsignal machen. Wenn ich diesen C-Code so ausführe, wirft der Linker 
folgende Fehlermeldungen aus:

Fehler  1  error LNK2019: Verweis auf nicht aufgelöstes externes Symbol 
"_fftw_destroy_plan" in Funktion "_wmain".  1D_FFT.obj  1D_FFT
Fehler  2  error LNK2019: Verweis auf nicht aufgelöstes externes Symbol 
"_fftw_execute" in Funktion "_wmain".  1D_FFT.obj  1D_FFT
Fehler  3  error LNK2019: Verweis auf nicht aufgelöstes externes Symbol 
"_fftw_plan_dft_1d" in Funktion "_wmain".  1D_FFT.obj  1D_FFT
Fehler  4  fatal error LNK1120: 3 nicht aufgelöste externe Verweise. 
D:\Informatik\1D_FFT\Debug\1D_FFT.exe  1  1D_FFT

Die Headerdatei sowie die Bibliothek hab ich schon hinzugefügt:
Optionen->VC++ Verzeichnisse->Includedatein
Optionen->VC++ Verzeichnisse->Bibliotheksdateien
1
// 1D_FFT.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
2
//
3
4
5
/* -- Include the precompiled libraries -- */
6
#ifdef WIN32
7
#pragma comment(lib, "libfftw.lib")
8
#endif
9
10
#include "stdafx.h"
11
#include <iostream>
12
#include <complex>
13
#include <stdlib.h> 
14
#include "fftw3.h"
15
16
17
int _tmain(int argc, _TCHAR* argv[])
18
{
19
  int N = 100; 
20
21
  std::complex<double>*  in=new std::complex<double> [N];
22
  std::complex<double>* out=new std::complex<double> [N];
23
24
   fftw_plan p = fftw_plan_dft_1d(N,reinterpret_cast<fftw_complex*>(in), 
25
                    reinterpret_cast<fftw_complex*>(out), 
26
                  FFTW_FORWARD, FFTW_ESTIMATE);
27
   double pi=acos(-1.);
28
   for (int i=0;i<N;i++)
29
     in[i]=sin(2*pi*0.2*i);       
30
31
   fftw_execute(p); 
32
33
   for (int i=0;i<N;i++)
34
      std::cout << i << " "
35
            << out[i].real() << " "
36
            << out[i].imag() << std::endl;
37
38
   fftw_destroy_plan(p);
39
   delete [] in;
40
   delete [] out;
41
42
  return 0;
43
}

Woran könnte dies liegen?

von zwieblum (Gast)


Lesenswert?

daran, dass di die fftw lib nicht linkst.

von Signal (Gast)


Lesenswert?

Wo muss ich die lib Datei dem Linker mitteilen?

von Signal (Gast)


Lesenswert?

Danke zwieblum für die Hilfe.
Ich hab schon alles mögliche eingestellt. Ich weiss nicht mehr wo ich 
noch was einstellen muss.

von Markus V. (valvestino)


Lesenswert?

Hi Signal,

Die Einstellung, die Du gemacht hast (Optionen->VC++ 
Verzeichnisse->Bibliotheksdateien), teilt der IDE mit, wo sie nach 
Bibliotheken suchen soll. Was aber noch fehlt, ist die Einstellung im 
Projekt, welche Bibliothek denn dazu gelinkt werden soll. Die findest Du 
in den Projekteingenschaften/Linker.

Gruß
Markus

von Signal (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Markus Volz,

und was muss ich dann wo genau einstellen?

So funktioniert es auch nicht.

von Markus V. (valvestino)


Angehängte Dateien:

Lesenswert?

Ich habe leider nur eine Englische Version vom VS. Die Einstellung 
findest Du unter Linker  Input   Additional Dependencies (siehe 
Screenshot). Dort mußt Du Deine zusätzlichen Libs/DLLs angeben.

Gruß
Markus

von Signal (Gast)


Lesenswert?

Danke für die Hilfe.

Zuerst habe ich die libfftw.lib hinzugefügt. Dann hat der Linker die 
libm.lib Datei vermisst. Als ich dies getan habe tut der Linker die 
libc.lib vermissen. Ich kann niergends diese Datei finden.

von Karl H. (kbuchegg)


Lesenswert?

Signal schrieb:
> Danke für die Hilfe.
>
> Zuerst habe ich die libfftw.lib hinzugefügt. Dann hat der Linker die
> libm.lib Datei vermisst. Als ich dies getan habe tut der Linker die
> libc.lib vermissen. Ich kann niergends diese Datei finden.

UNgewöhnlich.
ist deine libfftw.lib speziell für Visual Studio 2008 gemacht worden?

(die beiden Libraries für Mathematische Funktionen bzw. die Standard 
Runtime Library werden sowieso immer automatisch mit dazugelinkt, die 
muss man nicht extra hinzufügen. Allerdings heissen sie bei VS anders. 
Ich denke, du hast eine Library erwischt, die mit einem gcc gebaut 
wurde, daher die für VS ungewöhnlichen Librarynamen)

Sei gewarnt:
Es ist nicht so einfach möglich, Libraries in Binärform von 
verschiedenen Compilern quer durch die Bank zu mischen.
Wenn du auf Visual Studio entwickelst, achte darauf bei einem Download 
immer die Version für Visual Studio zu holen. Gibt es keine 
vorcompilierte Version für Visual Studio, dann holt man sich die 
Quelltexte und erzeugt sich die Library für seinen Compiler selber.

von Signal (Gast)


Lesenswert?

Gibt es nun irgendeine alternative. Ich möchte eigentlich nur unter 
Microsoft Visual Studio C++ deine FFT durchführen.

von Karl H. (kbuchegg)


Lesenswert?

Signal schrieb:
> Gibt es nun irgendeine alternative. Ich möchte eigentlich nur unter
> Microsoft Visual Studio C++ deine FFT durchführen.


Und wo hast du die Library her, die den FFT Code enthält?

von Signal (Gast)


Lesenswert?

Von der FFTW Home Page www.fftw.org.

von ... (Gast)


Lesenswert?

Lesen mußt Du schon selber

http://www.fftw.org/install/windows.html

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.