Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

FFTW w Visual Studio 2008

Blofeld 13 Apr 2010 01:30 2115 4
  • #1
    Blofeld
    Level 12  
    Witam!
    Mam problem z podłączeniem biblioteki fftw do projektu w ms vs2008.
    Próbowałem ściągnąć ze strony fftw kody źródłowe, które wrzuciłem do folderu SDK projektu fftw w vs2008 (ściągnięty też ze strony fftw), skompilować to i "dorzucić" otrzymany libfftw.lib do mojego projektu, który ma zawarte funkcje zgodne z fftw. Niestety otrzymuję błąd:
    error LNK2019: unresolved external symbol __imp_fftw_free
    i takie same dla pozostałych funkcji zawartych w fftw.

    Próbowałem też ściągnąć gotową paczkę z dll-ami i plikiem fftw.h, ale chyba nie umiem sobie z tym poradzić - posługiwałem się "How Do I", ale mam ten sam błąd, co powyżej.

    Z góry dziękuję za wskazówki kogoś, kto podłączał już fftw w vs2008.
  • Helpful post
    #2
    Akane
    Level 27  
    Zapewne zapomniałeś dodać jednej z bibliotek do opcji linkera. Możesz dodać jedną, zależnie której używasz (float/double/ldouble), lub wszystkie razem:
    Code:
    #pragma comment(lib, "libfftw3-3.lib")
    
    #pragma comment(lib, "libfftw3f-3.lib")
    #pragma comment(lib, "libfftw3l-3.lib")
  • #3
    Blofeld
    Level 12  
    Faktycznie tego nie miałem, ale po dodaniu mam ten sam błąd (wstawiałem to też na wszelki wypadek w różnych dziwnych miejscach, na wypadek gdybym wstawiał to nie tam gdzie trzeba ;) ale i tak nie pomogło).

    Dodam jeszcze, że robię to wszystko w systemie 64 bitowym, doczytałem się gdzieś, że mogą być przez to problemy. Czy jest jakaś rada na to, jeśli chcę działać na 64?

    Mam ściągnięte tylko gotowe dll bez źródeł (jeśli chodzi o te 3 biblioteki: 3-3, 3i-3, 3f-3), one są pod system 64 bitowy, natomiast ten kod, który kompiluję sam daje mi libfftw.lib - tylko jedną bibliotekę. Chyba coś źle robię w przypadku działania z tymi dll-ami, bo właśnie zauważyłem dla nich warningi:
    warning LNK4003: invalid library format; library ignored
  • Helpful post
    #4
    Akane
    Level 27  
    Skoro kompilujesz pod 64 bity, to i .lib'y muszą mieć odpowiedni format.
    ftp://ftp.fftw.org/pub/fftw/fftw-3.2.2-dll64.zip
    Niestety nie ma tam plików .lib, ale możesz je sam zrobić. W menu start poszukaj swojego visual-studio i kliknij command prompt (dla x64).
    W konsoli przejdź do katalogu z wypakowanym fftw-3.2.2-dll64 i wklej kolejno te polecenia:
    Code:
    link -lib /def:libfftw3-3.def /out:libfftw3-3.lib
    
    link -lib /def:libfftw3f-3.def /out:libfftw3f-3.lib
    link -lib /def:libfftw3l-3.def /out:libfftw3l-3.lib

    Powstałe pliki .lib skopiuj gdzie trzeba, a .exp usuń. W pliku README-WINDOWS są jeszcze inne opcje.
  • #5
    Blofeld
    Level 12  
    Zrobiłem tak, jak napisałeś - program już się kompiluje. Ustawiam wszędzie x64.
    Ale niestety kiedy uruchamiam mój program (jako bibliotekę pod matlabem) - dostaję informację, ze plik jest niepoprawny; sprawdziłem i widać, że staje się poprawny dopiero po usunięciu z kodu funkcji zawartych w bibliotece fftw (nawet wtedy jest niepoprawny, kiedy w ogóle nie wywołuję mojej funkcji, która zawiera te funkcje z fftw). Natomiast deklaracje typów zdefiniowanych w fftw nie przeszkadzają.
    Dodam jeszcze, że robię to na AMD Athlon 64 X2 Dual Core.


    OK, jednak już działa. Po prostu ten "pierwotny" dll musi być w tej samej ścieżce, co "wtórny", bo do niego zewnętrzny program też się dobiera. Dzięki za pomoc.