Проблема с компоновкой при вызове функции Fortran из кода C/C++

Я пытаюсь вызвать функцию написанную на Fortran из кода на C. Но при компоновке получаю ошибку "undefined reference".

Пример функции на Fortran в файле fort.f90:

FUNCTION CULC(A,B) RESULT(SUM) BIND(C,name='CULC99')
REAL A,B,SUM
SUM = A + B
RETURN
END

Основной код на C, файл hello.c

#include <stdio.h>
extern float CULC99(float *a, float *b);

int main() {
    float a = 10; float b = 10;
    float c;
    c = CULC99(&a,&b);
    printf("%f", a);
    return 0;
}

Компилирую для Windows с помощью gfortran и g++ в среде Cygwin64 (решив проблемы с недостающими библиотеками)

undefined reference

Проверял имя функции в объектном файле с помощью objdump, имя совпадает:

введите сюда описание изображения

Не понимаю чего не хватает.

Пробовал делать тоже самое (вызывать функцию из другого объектного файла) для чистого C, всё прекрасно компонуется.


Ответы (1 шт):

Автор решения: vs_nikolaev

Как правильно заметил @user7860670

Не стоит путать C и C++

Проблема оказалась в том, что я перепутал компиляторы gcc и g++.

После добавления extern "C" компилятор g++ нашёл вызываемые функции.

Возможно gcc справиться с компоновкой при использовании extern, но я не смог это проверить, т.к. нужно подключать недостающие библиотеки, а у меня уже нет сил на это, после 3-х дней войны с компоновщиком =(

→ Ссылка