Мне удалось успешно скомпилировать общую библиотеку, используя IFORT, который содержит некоторые файлы .obj (т.е. зависимости), скомпилированные Visual Studio C.
При попытке использовать эту общую библиотеку в программе на Фортране она не сообщает Example.obj : error LNK2019: unresolved external symbol TEST_mp_EXECUTE referenced in function MAIN__
.
Когда я использую инструмент dumpbin.exe
, я вижу, что функция execute
находится в общей библиотеке.Есть идеи, почему это несоответствие имен приводит к сбою компиляции программы на Фортране?
Содержимое файла Test.c
:
__declspec(dllexport) int execute(void);
int execute(void)
{
return 2 + 3;
}
Файл Test.c
успешно скомпилировано с Microsoft VisualStudio C выглядит следующим образом (в результате получается объектный файл с именем Test.obj
):
cl.exe Test.c /FoTest.obj
Содержимое файла Test.f90
:
MODULE Test
USE, INTRINSIC :: iso_c_binding, ONLY: c_int
IMPLICIT NONE
INTERFACE
INTEGER(c_int) FUNCTION execute() BIND(C, name = "execute")
USE, INTRINSIC :: iso_c_binding, ONLY: c_int
END FUNCTION
END INTERFACE
END MODULE
Файл Test.f90
, успешно скомпилированный с IFORTследующим образом (в результате получается общая библиотека с именем Test_dll.dll
вместе с заголовочным файлом с именем Test_dll.lib
и файлом модуля Fortran с именем test.mod
):
ifort.exe Test.obj /Qm64 /LD /FeTest_dll.dll
Содержимое файла Example.f90
:
PROGRAM Example
USE test
state = execute()
END PROGRAM
Теперь при попытке скомпилировать файл Example.f90
как ifort.exe Example.f90 Test_dll.lib
он не может сказать Example.obj : error LNK2019: unresolved external symbol TEST_mp_EXECUTE referenced in function MAIN__
.Есть идеи, что происходит?