Невозможно связать библиотеку fftw с помощью Visual C ++ Express в Windows 64 bit - PullRequest
1 голос
/ 28 января 2012

Я пытаюсь создать ссылку на библиотеку fftw с помощью Visual C ++ Express, но получаю ошибки компоновщика при попытке компиляции.Я сгенерировал файлы lib как сайт (http://fftw.org/install/windows.html) объясняет, создавая .lib «библиотеки импорта» с помощью программы lib.exe.

Я добавил файлы .lib в «Program Files (x86) \ Microsoft Visual»Studio 9.0 \ VC \ lib "и fftw3.h для" Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC \ include ". Затем я помещаю dll-файлы в папку" Windows / system32 ". Я связал библиотеки, добавивих (libfftw3f-3.lib, libfftw3-3.lib, libfftw3l-3.lib) для дополнительных зависимостей от предпочтений компоновщика / ввода. При попытке компиляции я получаю следующие ошибки:

    process_wav.obj : error LNK2019: unresolved external symbol __imp__fftwf_destroy_plan referenced in function _main
    process_wav.obj : error LNK2019: unresolved external symbol __imp__fftwf_plan_dft_r2c_1d referenced in function _main

Я искал переполнение стека, но большинство ответов объясняют, что библиотеки должны быть добавлены к дополнительным зависимостям, которые нужно найти. Когда я помещаю / verbose: lib в параметры командной строки, я получаю следующее:

    f
    fdf

1>Linking...
1>Searching libraries
1>    Searching libfftw3f-3.lib:
1>    Searching libfftw3-3.lib:
1>    Searching libfftw3l-3.lib:
1>    Searching F:\Program Files\Mega-Nerd\libsndfile-win32-bin-1.1.7\libsndfile-1.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbc32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbccp32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\kernel32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\user32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\gdi32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\winspool.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\comdlg32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\advapi32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\shell32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\ole32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\oleaut32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\uuid.lib:
1>    Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\MSVCRTD.lib:
1>    Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\OLDNAMES.lib:
1>    Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\msvcprtd.lib:
1>    Searching libfftw3f-3.lib:
1>    Searching libfftw3-3.lib:
1>    Searching libfftw3l-3.lib:
1>    Searching F:\Program Files\Mega-Nerd\libsndfile-win32-bin-1.1.7\libsndfile-1.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbc32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbccp32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\kernel32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\user32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\gdi32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\winspool.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\comdlg32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\advapi32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\shell32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\ole32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\oleaut32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\uuid.lib:
1>    Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\MSVCRTD.lib:
1>    Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\OLDNAMES.lib:
1>    Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\msvcprtd.lib:
1>    Searching libfftw3f-3.lib:
1>    Searching libfftw3-3.lib:
1>    Searching libfftw3l-3.lib:
1>    Searching F:\Program Files\Mega-Nerd\libsndfile-win32-bin-1.1.7\libsndfile-1.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbc32.lib:
1>    Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbccp32.lib:
1>Finished searching libraries

Кажется, он находит библиотеки, но не знает, кто может найти в них имена функций. Я получил код с веб-сайта, который также использует эту библиотеку, интересно, что имена функций не появляются в "fftw3.h" buЯ не думаю, что это является причиной проблемы.

Любая помощь будет принята с благодарностью, поскольку я не уверен, куда обратиться сейчас.

Спасибо.

Ответы [ 4 ]

3 голосов
/ 30 января 2012

Следующие шаги работают для меня в Visual Studio 2008 (из http://itkcorner.blogspot.com/2012/01/inclusion-de-fftw-en-visual-studio-2008.html);

  1. Загрузите файл «fftw-3.3dll32.zip» с веб-сайта fftw org (http://www.fftw.org/install/windows.html)

  2. Чтобы связать эти файлы DLL из Visual C ++, вам нужно создать для них .lib «библиотеки импорта», и это можно сделать с помощью команды «lib», поставляемой с VC ++. В частности, запустите: lib /def:libfftw3-3.def

В «Инструменты> Командная строка Visual Studio 2008» без открытия какого-либо проекта, просто Visual. Как только вы попадаете в консоль, вы идете с командой «cd» в корень, где находится папка, и когда вы запускаете три строки выше, а затем создаются файлы ‘lib.

  1. Скопируйте папку, в которой созданы библиотеки, а затем скопируйте ее в папку проекта, где мы хотим ее использовать, и переименуйте папку в «FFTW_LIBS». В этой папке необходимые файлы, которые имеют ‘ .dll’, ‘ .lib’ и ‘fftw3.h’.

  2. Включение библиотек в проект: «Проект> Свойства> Свойства конфигурации> Компоновщик> Запись> Дополнительные зависимости», а затем мы включаем три новых файла библиотек:

libfftw3-3.lib

  1. Включение пути, на котором лежат: а. «Проект> Свойства> Свойства конфигурации> Линкер> Общие> Каталог дополнительных библиотек», и там мы пишем «./FFTW_LIBS». б. «Проект> Свойства> Свойства конфигурации> Depuration> Среда», и там мы пишем «./FFTW_LIBSveloper.

  2. Включение пути к файлу «.dll». В «Проект> Свойства> Свойства конфигурации> Депонирование> Среда». В переменной «enviroment» мы должны указать, где находится файл «libfftw3-3.dll», и мы пишем «PATH =. \ FFTW_LIBS». После всех этих шагов вам просто нужно добавить «#include fftw3.h» и использовать функции fftw!

1 голос
/ 09 февраля 2017

Я представлю небольшую модификацию шагов Антонио:

Следующее работало для меня на Windwos 10, Visual Studio 2017, 32-битное приложение, x64 компьютер:

  1. Загрузите предварительно скомпилированные библиотеки DLL FFTW 3.3.5 и извлеките ZIP-файл

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

  2. Откройте приглашение разработчика cmd для VS 2017 RC и перейдите к извлеченному папка

  3. Запустите приложение lib следующим образом для создания библиотек импорта (.lib файлы) из библиотек .dll:

       lib /def:libfftw3-3.def
    
       lib /def:libfftw3f-3.def 
    
       lib /def:libfftw3l-3.def
    
  4. Скопируйте следующие файлы в новую папку, назовите эту новую папку fftw_lib :

           fftw3.h
           libfftw3-3.lib
           libfftw3f-3.lib
           libfftw3l-3.lib
           libfftw3-3.dll
           libfftw3f-3.dll
           libfftw3l-3.dll
    
  5. Скопируйте папку "fftw_lib" в папку вашего проекта

  6. Скажите компоновщику включить файлы .lib в ваш проект:

Project> Свойства> Свойства конфигурации> Linker> Entry> Дополнительные зависимости =

       libfftw3-3.lib
       libfftw3f-3.lib
       libfftw3l-3.lib
  1. Добавить путь к библиотекам в компоновщик и компилятор:

Project> Свойства> Свойства конфигурации> Linker> General> Каталог дополнительных библиотек =

C: \ Users \ Имя пользователя \ Documents \ Visual Studio 2017 \ Projects \ MP_2 \ MP_2 \ fftw_lib

Проект> Свойства> Свойства конфигурации> C / C ++> Общие> Дополнительные каталоги включения =

C: \ Users \ Имя пользователя \ Documents \ Visual Studio 2017 \ Projects \ MP_2 \ MP_2 \ fftw_lib

  1. Укажите путь, по которому библиотеки DLL:

Проект> Свойства> Свойства конфигурации> Отладка> Среда =

PATH = C: \ Users \ Имя пользователя \ Documents \ Visual Studio 2017 \ Projects \ MP_2 \ MP_2 \ fftw_lib

Конец!

0 голосов
/ 18 мая 2014

Я использую Visual Studio 2013 Express на 64-битной Windows 7, и у меня возникла та же проблема, что и у вас при попытке собрать для x64. Проблема заключалась в том, что я сгенерировал .lib и .exp, используя lib.exe из оболочки «Командная строка разработчика для VS2013». Когда я восстановил .lib и .exp из оболочки "VS2013 x64 Cross Tools Command Prompt", все ссылки были разрешены.

0 голосов
/ 20 сентября 2012

Может быть, во время выполнения он попросит вас пропустить fftw dll.
Я получил этот случай и просто положил их в папку system32.

...