Я хочу получить доступ к некоторым подпрограммам из сторонних DLL. Функции используют STDCALL в качестве вызывающего соглашения.gfortran, DLL, underscore
Запуск dumpbin /export foo.dll
дает мне что-то вроде:
...
7 6 00004B40 [email protected]
...
Я скомпилировать свой код, используя:
gfortran test.f90 -o test.exe -Wl,foo.dll
Я получаю сообщение об ошибке: undefined reference to '_foo_'
(обратите внимание на знак подчеркивания).
Я попытался добавить флаг компиляции -mrtd
, а также другие флаги, которые я googled, все безрезультатно.
Как я могу заставить fortran не добавлять символы подчеркивания?
редактировать: Немного разъяснений по порядку.
- У меня есть существующая DLL, к которой у меня нет источника.
- Эта DLL написана на Visual Basic, если это помогает.
- Я хочу назвать эту DLL от fortran.
- Когда я пишу в test.f90:
Foo(1.0d0)
я получаю ошибкуundefined reference to '_foo_'
тяг
Hmph. Спасибо за ответ, но я хочу вызвать * существующую * DLL * из * Fortran. Я редактирую вопрос, чтобы сделать его более понятным. –
Да, я понял, что вы вызывали существующую DLL из Fortran. Из сообщения об ошибке Fortran вызывает «_foo_», хотя, по-видимому, DLL имеет «Foo». Поэтому вы хотите сообщить компилятору Fortran, чтобы он не добавлял подчеркивания к обычным именам, что и делает параметр компилятора -fno-underscoring. –
Извините, предоставленная ссылка говорила о вызове fortran DLL. По какой-то причине '-fno-underscoring' не помогает. Когда я компилирую с '-v', я вижу, что он действительно используется, но он не меняет сообщение об ошибке. Я попробую это на другой установке, возможно ... –