|
Pierre
|
|
unidentified
|
|
|
|
|
|
|
Рег.: 06.09.2005
|
|
Сообщений: 243
|
|
Из: V544
|
|
Рейтинг: 178
|
|
|
Уперся я в итоге в следующее при любом выборе настроек /iface в конвенции имен предполагается, что перед именем стоит подчеркивание _
но как мы видели из листинга dumpbin имена присутствуют только без первого подчеркивания
В сообщениях об ошибках мы как раз и видим, что линкер пытается найти процедуру с подчеркиванием
Error 1 error LNK2019: unresolved external symbol _DFFTW_CLEANUP referenced in function _MAIN__ FFTWexp.obj
Опции, управляющей первым подчеркиванием я не нашел.
Попытка в программе писать
call _DFFTW_CLEANUP
приводит к Error 1 error #5192: Lead underscore not allowed
Что можно в таком случае сделать?
|
Лето прошло, наконец-то растаял снег... |
|
|
fedul
|
|
Вперед, Эдуард!
|
|
|
|
|
|
|
Рег.: 08.04.2004
|
|
Сообщений: 1538
|
|
|
|
Рейтинг: 2112
|
|
Re: FFTW и Visual Studio 2008
[re: Pierre]
10.08.2009 13:00
|
|
|
В ответ на:
By default, FFTW configures its Fortran interface to work with the first compiler it finds, e.g. g77. To configure for a different, incompatible Fortran compiler foobar, use ./configure F77=foobar when installing FFTW. (In the case of g77, however, FFTW 3.x also includes an extra set of Fortran-callable routines with one less underscore at the end of identifiers, which should cover most other Fortran compilers on Linux at least.)
Это делал?
|
|
|
Pierre
|
|
unidentified
|
|
|
|
|
|
|
Рег.: 06.09.2005
|
|
Сообщений: 243
|
|
Из: V544
|
|
Рейтинг: 178
|
|
Re: FFTW и Visual Studio 2008
[re: fedul]
10.08.2009 14:00
|
|
|
Этого я не делал. Я так понял, что использовать configure надо, если я хочу сам перекомпилить весь FFTW.
Вообще авторы предлагают концепцию самому перекомпилиь
MinGW: this is a free Unix-like environment for Windows based on the GNU C compiler (gcc). We recommend this route because it produces native Windows executables/libraries, but lets you use our standard Unix build scripts and Makefiles, automatically picks good compiler flags, and so on. See below for instructions
я даже установил этот MinGW, но вот как с ним обращаться, где эту команду ./configure писать я не представляю.
Как я уже писал постом выше, проблема, мне кажется, в том, чтобы откомпилировать так, чтобы перед именами функций прошитых в .dll стояли бы подчеркивания. Но и как это сделать я не представляю (даже если бы я умел работать с MinGW)
|
Лето прошло, наконец-то растаял снег... |
|
|
unkulunkulu
|
|
unkulunkulunkulu
|
|
|
|
|
|
|
Рег.: 12.11.2006
|
|
Сообщений: 18453
|
|
Из: 13000
|
|
Рейтинг: 11759
|
|
Re: FFTW и Visual Studio 2008
[re: Pierre]
10.08.2009 14:17
|
|
|
Quote:
Как я уже писал постом выше, проблема, мне кажется, в том, чтобы откомпилировать так, чтобы перед именами функций прошитых в .dll стояли бы подчеркивания. Но и как это сделать я не представляю (даже если бы я умел работать с MinGW)
Ты же dll не можешь перекомпилить. В ней имена как раз соответствуют тому декорированию, информацию о котором я смог найти (да, на википедии =), а вот твой компилятор декорирует по-сишному. Вот мне и кажется, что он так декорирует, чтобы было удобнее обращаться к функциям, написанным на C, т.е. якобы для "лошков"
Обрати внимание еще на одну вещь: дело не только в подчеркивании, но и в регистре символов, он их за тебя капитализировал (потому что Fortran - case-insensitive, а тот же C - case-sensitive, и можно по-разному это реализовывать. Википедия пишет, что обычно фортрановские функции декорируют приведением к нижнему регистру и дописыванием подчеркивания в конец, у тебя же мы видим приведение к верхнему регистру и дописывание подчеркивания в начало, вот это и надо поправить: В НАСТРОЙКАХ КОМПИЛЯЦИИ ТВОЕЙ ПРОГРАММЫ)
|
|
|
unkulunkulu
|
|
unkulunkulunkulu
|
|
|
|
|
|
|
Рег.: 12.11.2006
|
|
Сообщений: 18453
|
|
Из: 13000
|
|
Рейтинг: 11759
|
|
|
Кстати, если бы КОНТРА сейчас заглядывал в форум, он бы мог предложить текстовую замени имен _ТАКОГО_ВИДА к именам такого_вида_ перед передачей файла линковщику, например, программкой sed.
|
|
|
Pierre
|
|
unidentified
|
|
|
|
|
|
|
Рег.: 06.09.2005
|
|
Сообщений: 243
|
|
Из: V544
|
|
Рейтинг: 178
|
|
|
В настройках компилятора, судя по help нет возможности убрать переднее подчеркивание в случае если программа делается для win32. Однако, если целевая платформа Win64, то он не дописывает ни переднего подчеркивания ни @, ни подчеркивания сзади.
В win64 *.dll имена такие
0 000DCD8F DFFTW_CLEANUP 1 00145CD0 DFFTW_CLEANUP_THREADS 2 000DCDB6 DFFTW_DESTROY_PLAN 3 000DC0CA DFFTW_EXECUTE 4 000DC0E5 DFFTW_EXECUTE_DFT 5 000DC1AF DFFTW_EXECUTE_DFT_C2R 6 000DC146 DFFTW_EXECUTE_DFT_R2C 7 000DC21E DFFTW_EXECUTE_R2R 8 000DC12E DFFTW_EXECUTE_SPLIT_DFT 9 000DC1E7 DFFTW_EXECUTE_SPLIT_DFT_C2R A 000DC17B DFFTW_EXECUTE_SPLIT_DFT_R2C
т.е. все вроде бы нормально. Однако на
call DFFTW_CLEANUP
та же ругань
Error 1 error LNK2019: unresolved external symbol DFFTW_CLEANUP referenced in function MAIN__ FFTWexpx64.obj
Вот это вообще абзац.
Я видимо до дачи, спасибо за содержательные ответы, вернусь вечером.
|
Лето прошло, наконец-то растаял снег... |
|
|
unkulunkulu
|
|
unkulunkulunkulu
|
|
|
|
|
|
|
Рег.: 12.11.2006
|
|
Сообщений: 18453
|
|
Из: 13000
|
|
Рейтинг: 11759
|
|
Re: FFTW и Visual Studio 2008
[re: Pierre]
10.08.2009 14:29
|
|
|
регистр не совпадает же, в этом и беда.
Ладно, всегда остается вариант скомпилить в асм (или декомпилить объектник, заменить имена, закомпилить обратно и передать линкеру, но это для мужчин с железными яйцами =)
|
|
|
unkulunkulu
|
|
unkulunkulunkulu
|
|
|
|
|
|
|
Рег.: 12.11.2006
|
|
Сообщений: 18453
|
|
Из: 13000
|
|
Рейтинг: 11759
|
|
|
Хотя я что-то тупанул, регистр же совпадает  Ты lib-файл перегенерировал, когда с win64-dll пробовал? Во время компиляции файл dll вообще не используется.
|
|
|
maver
|
|
жоном
|
|
|
|
|
|
|
Рег.: 15.12.2004
|
|
Сообщений: 240
|
|
|
|
Рейтинг: 13
|
|
|
все правильно, дело в регистре, а не в подчеркивании перед именем. регистр можно поменять в project properties/fortran/external procedures/name case interpretation
Чтобы работало надо: 1) поставь там lowercase 2) там же в настройках добавить нижнее подчеркивание после каждого имени
только что проверено и на 32 и на 64 битах. И не забудь откомпилить библиотеку из соответствующих разрядности .def файлов для fftw
|
|
|
Pierre
|
|
unidentified
|
|
|
|
|
|
|
Рег.: 06.09.2005
|
|
Сообщений: 243
|
|
Из: V544
|
|
Рейтинг: 178
|
|
Re: FFTW и Visual Studio 2008
[re: maver]
10.08.2009 17:51
|
|
|
Всем спасибо, проблему решил Maver)))
Выводы:
В настройках проекта Fortran -> External Procedures -> Name Case Interpretation -> Lower Case (/names:lowercase) Fortran -> External Procedures -> Append Underscore to External Names -> Yes(/assume:underscore)
не забыть кинуть *.dll в Windows\system32\
или в свойствах проекта Debugging -> Environment
PATH=%PATH%;Path to the folder containing libfftw3-3.dll
Еще раз всем спасибо за содержательную дискуссию
|
Лето прошло, наконец-то растаял снег... |
|
|
unkulunkulu
|
|
unkulunkulunkulu
|
|
|
|
|
|
|
Рег.: 12.11.2006
|
|
Сообщений: 18453
|
|
Из: 13000
|
|
Рейтинг: 11759
|
|
Re: FFTW и Visual Studio 2008
[re: Pierre]
10.08.2009 20:04
|
|
|
Quote:
В настройках проекта Fortran -> External Procedures -> Name Case Interpretation -> Lower Case (/names:lowercase) Fortran -> External Procedures -> Append Underscore to External Names -> Yes(/assume:underscore)
Я же тебе про это писал с самой середины. Ладно, я рад 
|
|