FFTW: Probleme mit Linker

Gast #1599208
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?
#1600149
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
Gast #1600234
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.
#1600326
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.

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