mac instalar for compiler compilar compilador como c++ gcc fortran g++ gfortran

instalar - Referencia indefinida a la función de Fortran en C++



gfortran gcc (1)

Parece que no puedo entender por qué esto no funciona.

/* main.cpp */ #include <stdio.h> extern "C" { int __stdcall inhalf(int *); } int main() { int toHalf = 2; int halved = inhalf(&toHalf); printf("Half of 2 is %d", halved); return 0; }

Ok, eso se ve bien.

$ g++ -c main.cpp

Sin errores.

! functions.f90 function inhalf(i) result(j) integer, intent(in) :: i integer :: j j = i/2 end function inhalf

Estoy bastante seguro de que es correcto.

$ gfortran -c functions.f90

Hasta aquí todo bien...

$ gcc -o testo main.o functions.o main.o:main.cpp:(.text+0x24): undefined reference to `inhalf@4'' collect2.exe: error: ld returned 1 exit status

He estado buscando esto durante más de una hora, pero no pude encontrar nada que funcionara en este caso. ¿Cómo debería resolver esto?


Para una compatibilidad total de C, puede usar la función de vinculación del Fortran moderno:

! functions.f90 function inhalf(i) result(j) bind(C,name=''inhalf'') integer, intent(in) :: i integer :: j j = i/2 end function inhalf

Esto le permite dar un nombre a la función que puede usar en C (y en otros) sin depender del esquema de nombres que su compilador usa por sí mismo.

La __stdcall es solo Win32 (y el comportamiento predeterminado para la vinculación, ver aquí ). Puedes eliminarlo de forma segura. [En realidad, es necesario para compilar su código en Linux. ]