www.mikrocontroller.net

Forum: PC-Programmierung FFTW: Probleme mit Linker


Autor: Signal (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
// 1D_FFT.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//


/* -- Include the precompiled libraries -- */
#ifdef WIN32
#pragma comment(lib, "libfftw.lib")
#endif

#include "stdafx.h"
#include <iostream>
#include <complex>
#include <stdlib.h> 
#include "fftw3.h"


int _tmain(int argc, _TCHAR* argv[])
{
  int N = 100; 

  std::complex<double>*  in=new std::complex<double> [N];
  std::complex<double>* out=new std::complex<double> [N];

   fftw_plan p = fftw_plan_dft_1d(N,reinterpret_cast<fftw_complex*>(in), 
                    reinterpret_cast<fftw_complex*>(out), 
                  FFTW_FORWARD, FFTW_ESTIMATE);
   double pi=acos(-1.);
   for (int i=0;i<N;i++)
     in[i]=sin(2*pi*0.2*i);       

   fftw_execute(p); 

   for (int i=0;i<N;i++)
      std::cout << i << " "
            << out[i].real() << " "
            << out[i].imag() << std::endl;

   fftw_destroy_plan(p);
   delete [] in;
   delete [] out;

  return 0;
}

Woran könnte dies liegen?

Autor: zwieblum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
daran, dass di die fftw lib nicht linkst.

Autor: Signal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo muss ich die lib Datei dem Linker mitteilen?

Autor: Signal (Gast)
Datum:

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

Autor: Markus Volz (valvestino)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Signal (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Markus Volz,

und was muss ich dann wo genau einstellen?

So funktioniert es auch nicht.

Autor: Markus Volz (valvestino)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Signal (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Signal (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Signal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Von der FFTW Home Page www.fftw.org.

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lesen mußt Du schon selber

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.