Pierre
|
unidentified
|
|
|
|
Рег.: 06.09.2005
|
Сообщений: 243
|
Из: V544
|
Рейтинг: 178
|
|
FFTW и Visual Studio 2008 [FIXED]
09.08.2009 20:55
|
|
|
Необходимо осуществлять вызов подпрограмм быстрого преобразования Фурье из программы на Fortran'е. Разработка в Visual Studio 2008, компилятор Intel Fortran 11.0.072.
Разработчики поставляют откомпилированные для WinXP *.dll файлы и к ним *.def.
В интернетах вычитал, что надо из этих *.def с помощью команды lib компилятора сделать *.lib для того чтобы программа могла вызывать функции прошитые в .dll
Из командной строки intel fortran выполнил
lib /machine:i386 /def:libfftw3-3.def
получил libfftw3-3.lib
Теперь вопрос - как правильно привязать эти *.lib к программе, чтобы она "видела" зашитые функции.
Пробовал два варианта: 1. Непосредственно подключал файлы .lib к проекту: Project - Add Existing Item...
2. Подкидывал .lib в каталог библиотек intel fortran
C:\Program Files\Intel\Compiler\11.0\072\fortran\lib\ia32
и в свойствах проекта указывал Linker - input - Additional Dependencies имя библиотеки
а в Linker - General - Additional Library Directoties на всякий случай и путь C:\Program Files\Intel\Compiler\11.0\072\fortran\lib\ia32
Результат линкирования программы вида
***************************************** program FFTWexp
include 'fftw3.f'
integer(4),parameter::N = 1024 integer*8::plan complex,dimension(1:N)::in, out
call dfftw_plan_dft_1d(plan,N,in,out,FFTW_FORWARD,FFTW_ESTIMATE) call dfftw_destroy_plan(plan)
pause
end program FFTWexp ********************************************* выдает ошибки
Error 1 error LNK2019: unresolved external symbol _DFFTW_PLAN_DFT_1D referenced in function _MAIN__ FFTWexp.obj
Error 2 error LNK2019: unresolved external symbol _DFFTW_DESTROY_PLAN referenced in function _MAIN__ FFTWexp.obj
Error 3 fatal error LNK1120: 2 unresolved externals Debug\FFTWexp.exe
Вопрос: что это может быть, что я делаю неправильно?
Заранее спасибо)
Редактировал Pierre (10.08.2009 17:52)
|
Лето прошло, наконец-то растаял снег... |
|
Pierre
|
unidentified
|
|
|
|
Рег.: 06.09.2005
|
Сообщений: 243
|
Из: V544
|
Рейтинг: 178
|
|
Re: FFTW и Visual Studio 2008
[re: Pierre]
09.08.2009 21:05
|
|
|
|
unkulunkulu
|
unkulunkulunkulu
|
|
|
|
Рег.: 12.11.2006
|
Сообщений: 18453
|
Из: 13000
|
Рейтинг: 11759
|
|
Re: FFTW и Visual Studio 2008
[re: Pierre]
09.08.2009 21:09
|
|
|
|
Pierre
|
unidentified
|
|
|
|
Рег.: 06.09.2005
|
Сообщений: 243
|
Из: V544
|
Рейтинг: 178
|
|
|
Файл достаточно большой. Вот только часть
LIBRARY libfftw3-3.dll EXPORTS dfftw_cleanup_ dfftw_cleanup__ dfftw_cleanup_threads_ dfftw_cleanup_threads__ dfftw_destroy_plan_ dfftw_destroy_plan__ dfftw_execute_ dfftw_execute__ dfftw_execute_dft_ dfftw_execute_dft__ dfftw_execute_dft_c2r_ dfftw_execute_dft_c2r__ dfftw_execute_dft_r2c_ dfftw_execute_dft_r2c__ dfftw_execute_r2r_ dfftw_execute_r2r__ dfftw_execute_split_dft_ dfftw_execute_split_dft__ dfftw_execute_split_dft_c2r_ dfftw_execute_split_dft_c2r__ dfftw_execute_split_dft_r2c_ dfftw_execute_split_dft_r2c__ dfftw_export_wisdom_ dfftw_export_wisdom__ dfftw_flops_ dfftw_flops__ dfftw_forget_wisdom_ dfftw_forget_wisdom__ dfftw_import_system_wisdom_ dfftw_import_system_wisdom__ dfftw_import_wisdom_ dfftw_import_wisdom__ dfftw_init_threads_ dfftw_init_threads__ dfftw_plan_dft_ dfftw_plan_dft_1d_ dfftw_plan_dft_1d__ dfftw_plan_dft_2d_ dfftw_plan_dft_2d__ dfftw_plan_dft_3d_ dfftw_plan_dft_3d__ dfftw_plan_dft__ dfftw_plan_dft_c2r_ dfftw_plan_dft_c2r_1d_ dfftw_plan_dft_c2r_1d__ dfftw_plan_dft_c2r_2d_ dfftw_plan_dft_c2r_2d__ dfftw_plan_dft_c2r_3d_ dfftw_plan_dft_c2r_3d__ dfftw_plan_dft_c2r__ dfftw_plan_dft_r2c_ dfftw_plan_dft_r2c_1d_ dfftw_plan_dft_r2c_1d__ dfftw_plan_dft_r2c_2d_ dfftw_plan_dft_r2c_2d__ dfftw_plan_dft_r2c_3d_ dfftw_plan_dft_r2c_3d__ dfftw_plan_dft_r2c__ dfftw_plan_guru_dft_ dfftw_plan_guru_dft__ dfftw_plan_guru_dft_c2r_ dfftw_plan_guru_dft_c2r__ dfftw_plan_guru_dft_r2c_ dfftw_plan_guru_dft_r2c__ dfftw_plan_guru_r2r_ dfftw_plan_guru_r2r__ dfftw_plan_guru_split_dft_ dfftw_plan_guru_split_dft__ dfftw_plan_guru_split_dft_c2r_ dfftw_plan_guru_split_dft_c2r__ dfftw_plan_guru_split_dft_r2c_ dfftw_plan_guru_split_dft_r2c__ dfftw_plan_many_dft_ dfftw_plan_many_dft__ dfftw_plan_many_dft_c2r_ dfftw_plan_many_dft_c2r__ dfftw_plan_many_dft_r2c_ dfftw_plan_many_dft_r2c__ dfftw_plan_many_r2r_ dfftw_plan_many_r2r__ dfftw_plan_r2r_ dfftw_plan_r2r_1d_ dfftw_plan_r2r_1d__ dfftw_plan_r2r_2d_ dfftw_plan_r2r_2d__ dfftw_plan_r2r_3d_ dfftw_plan_r2r_3d__ dfftw_plan_r2r__ dfftw_plan_with_nthreads_ dfftw_plan_with_nthreads__ dfftw_print_plan_ dfftw_print_plan__
|
Лето прошло, наконец-то растаял снег... |
|
unkulunkulu
|
unkulunkulunkulu
|
|
|
|
Рег.: 12.11.2006
|
Сообщений: 18453
|
Из: 13000
|
Рейтинг: 11759
|
|
Re: FFTW и Visual Studio 2008
[re: Pierre]
09.08.2009 21:39
|
|
|
ага, ок. Теперь так: зайди в Пуск->Programs->Visual Studio 2008->Visual Studio Tools->Visual Studio 2008 Command Prompt. Оттуда введи code: dumpbin /exports "путь к файлу .dll в кавычках"
Там будет примерно столько же текста. Тоже скопируй сюда вывод. Можно просто строк 10 
|
|
Pierre
|
unidentified
|
|
|
|
Рег.: 06.09.2005
|
Сообщений: 243
|
Из: V544
|
Рейтинг: 178
|
|
|
|
unkulunkulu
|
unkulunkulunkulu
|
|
|
|
Рег.: 12.11.2006
|
Сообщений: 18453
|
Из: 13000
|
Рейтинг: 11759
|
|
Re: FFTW и Visual Studio 2008
[re: Pierre]
09.08.2009 22:15
|
|
|
Попробуй в той программе снести лишнее и вызвать dfftw_cleanup() и закомпилить.
|
|
Pierre
|
unidentified
|
|
|
|
Рег.: 06.09.2005
|
Сообщений: 243
|
Из: V544
|
Рейтинг: 178
|
|
|
результат тот же
Error 1 error LNK2019: unresolved external symbol _DFFT_CLEANUP referenced in function _MAIN__ FFTWexp.obj
|
Лето прошло, наконец-то растаял снег... |
|
unkulunkulu
|
unkulunkulunkulu
|
|
|
|
Рег.: 12.11.2006
|
Сообщений: 18453
|
Из: 13000
|
Рейтинг: 11759
|
|
Re: FFTW и Visual Studio 2008
[re: Pierre]
09.08.2009 22:16
|
|
|
А, подожди-ка. Ты в Additional Dependencies имя какой библиотеки добавил? Туда надо lib добавлять.
|
|
unkulunkulu
|
unkulunkulunkulu
|
|
|
|
Рег.: 12.11.2006
|
Сообщений: 18453
|
Из: 13000
|
Рейтинг: 11759
|
|
|
Хотя, прочитав еще раз первый пост, понял, что скорее всего ты правильно сделал.
|
|
Pierre
|
unidentified
|
|
|
|
Рег.: 06.09.2005
|
Сообщений: 243
|
Из: V544
|
Рейтинг: 178
|
|
|
там вроде так и прописано libfftw3-3.lib, мистика)
|
Лето прошло, наконец-то растаял снег... |
|
unkulunkulu
|
unkulunkulunkulu
|
|
|
|
Рег.: 12.11.2006
|
Сообщений: 18453
|
Из: 13000
|
Рейтинг: 11759
|
|
Re: FFTW и Visual Studio 2008
[re: Pierre]
09.08.2009 22:29
|
|
|
У меня плохое предчувствие, что тут надо знать механизмы декорации имен именно у компилятора фортрана. У меня сейчас на изучение этого нет сил  Странно, что у экспортируемых функций имена выглядят как NAME@number. В Си, например, они бы выглядели _NAME@number. Еще странно, что судя по выводу dumpbin dll-ка вообще с def-файлом не компилировалась.
Ладно, такая телепатия: поищи в настройках _компилятора_ Intel (там же, в настройках проекта должна быть соответствующая категория, рядом с Linker и C/C++), ищи в направлении calling conventions или типа того. Или name decoration. Все, что с этим связано - напиши.
|
|
unkulunkulu
|
unkulunkulunkulu
|
|
|
|
Рег.: 12.11.2006
|
Сообщений: 18453
|
Из: 13000
|
Рейтинг: 11759
|
|
Re: FFTW и Visual Studio 2008
[re: Pierre]
09.08.2009 22:30
|
|
|
Кстати, посмотри внимательнее на вывод dumpbin, нет ли там имен функций без значка собаки
|
|
unkulunkulu
|
unkulunkulunkulu
|
|
|
|
Рег.: 12.11.2006
|
Сообщений: 18453
|
Из: 13000
|
Рейтинг: 11759
|
|
Re: FFTW и Visual Studio 2008
[re: Pierre]
09.08.2009 22:34
|
|
|
Да, вот скажи, ты знаешь каким компилятором эта dll-ка компилировалась?
|
|
Pierre
|
unidentified
|
|
|
|
Рег.: 06.09.2005
|
Сообщений: 243
|
Из: V544
|
Рейтинг: 178
|
|
|
Разработчики пишут, что
These DLLs were created by us, cross-compiled from GNU/Linux using MinGW
в выводе dumpbin есть еще и такое ниже
47 2E 000A663D dfftw_cleanup_ 48 2F 000A4B7B dfftw_cleanup__ 49 30 0011E0CB dfftw_cleanup_threads_ 50 31 0011E0A5 dfftw_cleanup_threads__ 51 32 000A662E dfftw_destroy_plan_ 52 33 000A4B6C dfftw_destroy_plan__ 53 34 000A660E dfftw_execute_ 54 35 000A4B4C dfftw_execute__ 55 36 000A6D47 dfftw_execute_dft_ 56 37 000A5285 dfftw_execute_dft__ 57 38 000A7A32 dfftw_execute_dft_c2r_ 58 39 000A5F70 dfftw_execute_dft_c2r__ 59 3A 000A73C1 dfftw_execute_dft_r2c_ 60 3B 000A58FF dfftw_execute_dft_r2c__ 61 3C 000A80AA dfftw_execute_r2r_ 62 3D 000A65E8 dfftw_execute_r2r__ 63 3E 000A6DA6 dfftw_execute_split_dft_ 64 3F 000A52E4 dfftw_execute_split_dft__ 65 40 000A7A7C dfftw_execute_split_dft_c2r 66 41 000A5FBA dfftw_execute_split_dft_c2r 67 42 000A740B dfftw_execute_split_dft_r2c 68 43 000A5949 dfftw_execute_split_dft_r2c 69 44 000A6647 dfftw_export_wisdom_ 70 45 000A4B85 dfftw_export_wisdom__ 71 46 000A66DA dfftw_flops_ 72 47 000A4C18 dfftw_flops__ 73 48 000A6642 dfftw_forget_wisdom_ 74 49 000A4B80 dfftw_forget_wisdom__ 75 4A 000A66A3 dfftw_import_system_wisdom_ 76 4B 000A4BE1 dfftw_import_system_wisdom_ 77 4C 000A6672 dfftw_import_wisdom_ 78 4D 000A4BB0 dfftw_import_wisdom__ 79 4E 0011E0B9 dfftw_init_threads_ 80 4F 0011E093 dfftw_init_threads__ 81 50 000A66E9 dfftw_plan_dft_ 82 51 000A6796 dfftw_plan_dft_1d_ 83 52 000A4CD4 dfftw_plan_dft_1d__ 84 53 000A67D5 dfftw_plan_dft_2d_ 85 54 000A4D13 dfftw_plan_dft_2d__ 86 55 000A681E dfftw_plan_dft_3d_ 87 56 000A4D5C dfftw_plan_dft_3d__ 88 57 000A4C27 dfftw_plan_dft__ 89 58 000A744B dfftw_plan_dft_c2r_ 90 59 000A74E7 dfftw_plan_dft_c2r_1d_ 91 5A 000A5A25 dfftw_plan_dft_c2r_1d__ 92 5B 000A751C dfftw_plan_dft_c2r_2d_ 93 5C 000A5A5A dfftw_plan_dft_c2r_2d__ 94 5D 000A755B dfftw_plan_dft_c2r_3d_ 95 5E 000A5A99 dfftw_plan_dft_c2r_3d__ 96 5F 000A5989 dfftw_plan_dft_c2r__ 97 60 000A6DDA dfftw_plan_dft_r2c_ 98 61 000A6E76 dfftw_plan_dft_r2c_1d_ 99 62 000A53B4 dfftw_plan_dft_r2c_1d__ 100 63 000A6EAB dfftw_plan_dft_r2c_2d_ 101 64 000A53E9 dfftw_plan_dft_r2c_2d__ 102 65 000A6EEA dfftw_plan_dft_r2c_3d_ 103 66 000A5428 dfftw_plan_dft_r2c_3d__ 104 67 000A5318 dfftw_plan_dft_r2c__ 105 68 000A6A44 dfftw_plan_guru_dft_ 106 69 000A4F82 dfftw_plan_guru_dft__ 107 6A 000A7762 dfftw_plan_guru_dft_c2r_ 108 6B 000A5CA0 dfftw_plan_guru_dft_c2r__ 109 6C 000A70F1 dfftw_plan_guru_dft_r2c_ 110 6D 000A562F dfftw_plan_guru_dft_r2c__ 111 6E 000A7EE2 dfftw_plan_guru_r2r_ 112 6F 000A6420 dfftw_plan_guru_r2r__ 113 70 000A6BBD dfftw_plan_guru_split_dft_ 114 71 000A50FB dfftw_plan_guru_split_dft__ 115 72 000A78BA dfftw_plan_guru_split_dft_c 116 73 000A5DF8 dfftw_plan_guru_split_dft_c 117 74 000A7249 dfftw_plan_guru_split_dft_r 118 75 000A5787 dfftw_plan_guru_split_dft_r 119 76 000A6871 dfftw_plan_many_dft_ 120 77 000A4DAF dfftw_plan_many_dft__ 121 78 000A75A4 dfftw_plan_many_dft_c2r_ 122 79 000A5AE2 dfftw_plan_many_dft_c2r__ 123 7A 000A6F33 dfftw_plan_many_dft_r2c_ 124 7B 000A5471 dfftw_plan_many_dft_r2c__ 125 7C 000A7CAB dfftw_plan_many_r2r_ 126 7D 000A61E9 dfftw_plan_many_r2r__ 127 7E 000A7ABC dfftw_plan_r2r_ 128 7F 000A7BB2 dfftw_plan_r2r_1d_ 129 80 000A60F0 dfftw_plan_r2r_1d__ 130 81 000A7BF1 dfftw_plan_r2r_2d_ 131 82 000A612F dfftw_plan_r2r_2d__ 132 83 000A7C44 dfftw_plan_r2r_3d_ 133 84 000A6182 dfftw_plan_r2r_3d__ 134 85 000A5FFA dfftw_plan_r2r__ 135 86 0011E0AA dfftw_plan_with_nthreads_ 136 87 0011E084 dfftw_plan_with_nthreads__ 137 88 000A66B5 dfftw_print_plan_ 138 89 000A4BF3 dfftw_print_plan__ 139 8A 000011DC fftw_assertion_failed 140 8B 0012B1C0 fftw_cc 141 8C 000AB487 fftw_cleanup
|
Лето прошло, наконец-то растаял снег... |
|
Jerry
|
Санек
|
|
|
|
Рег.: 14.03.2004
|
Сообщений: 1360
|
Из: Москва
|
Рейтинг: 501
|
|
Re: FFTW и Visual Studio 2008
[re: Pierre]
09.08.2009 23:15
|
|
|
В Фортране по жизни какие-то траблы с подчеркиваниями. Обычно к фортрановским именам надо добавлять "_" в конец если хочешь вызвать функцию из Си, например. Если в названии функции где-то в середине уже есть "_", то все еще сложнее, иногда приходится добавлять два "__". Может тут где-то в этом косяк? Хотя в твоем выводе вроде все имена продублированы с одним "_" и с двумя "__" на конце, так что подхватываться должны вроде как: Странно, но я бы все равно попробовал поковыряться с разными вариациями "_" на конце, вдруг?
|
|
unkulunkulu
|
unkulunkulunkulu
|
|
|
|
Рег.: 12.11.2006
|
Сообщений: 18453
|
Из: 13000
|
Рейтинг: 11759
|
|
Re: FFTW и Visual Studio 2008
[re: Jerry]
09.08.2009 23:19
|
|
|
косяк с подчеркиваниями - это декорация имен (Name mangling, тут можешь прочитать).
Нет, вот на что надо обратить внимание: линковщик уже ничего не знает о языке, он ищет функцию _DFFTW_PLAN_DFT_1D и не может найти. Странно то, что подчеркивание стоит перед именем, хотя на википедии (ха-ха) утверждается, что для интеловского компилятора фортрана это не свойственно. Но это именно он должно быть так поступил. Поэтому все-таки надо порыться в его настройках, может быть там по умолчанию какой-то левый режим совместимости включен или еще чего. Посмотри настройки про name decoration/mangling. По идее это должно быть в свойствах проекта (я выше писал)
|
|
unkulunkulu
|
unkulunkulunkulu
|
|
|
|
Рег.: 12.11.2006
|
Сообщений: 18453
|
Из: 13000
|
Рейтинг: 11759
|
|
|
А, не заметил, что собеседник новый появился, в общем обращался я к топикстартеру в этом посте.
|
|
Pierre
|
unidentified
|
|
|
|
Рег.: 06.09.2005
|
Сообщений: 243
|
Из: V544
|
Рейтинг: 178
|
|
|
нашел в help iface - Specifies the default calling convention and argument-passing convention for an application. разбираюсь
|
Лето прошло, наконец-то растаял снег... |
|
unkulunkulu
|
unkulunkulunkulu
|
|
|
|
Рег.: 12.11.2006
|
Сообщений: 18453
|
Из: 13000
|
Рейтинг: 11759
|
|
Re: FFTW и Visual Studio 2008
[re: Pierre]
09.08.2009 23:28
|
|
|
Скорее всего когда разберешься, заработает. Я пошел 
|
|