Puedo usar gcc para hacer llamadas entre c y C++ o entre c y fortran usando g ++ o gfortran, respectivamente. Pero si trato de realizar llamadas a procedimientos entre C++ y fortran, obtengo errores al compilar con g ++ o gfortran porque ninguno de los dos conoce las bibliotecas requeridas por el otro. ¿Cómo puedo vincular un proyecto que usa código fuente escrito en C++ y fortran?Vinculación de los binarios fortran y C++ usando gcc
$ cat print_hi.f90
subroutine print_hi() bind(C)
implicit none
write(*,*) "Hello from Fortran."
end subroutine print_hi
$ cat main.cpp
#include <iostream>
extern "C" void print_hi(void);
using namespace std;
int main() {
print_hi();
cout << "Hello from C++" << endl;
return 0;
}
$ gfortran -c print_hi.f90 -o print_hi.o
$ g++ -c main.cpp -o main.o
I intenta enlazar con g ++:
$ g++ main.o print_hi.o -o main
print_hi.o: In function `print_hi':
print_hi.f90:(.text+0x3f): undefined reference to `_gfortran_st_write'
y otros errores con respecto a referencias indefinidas.
Y con gfortran:
$ gfortran main.o print_hi.o -o main
main.o: In function `main':
main.cpp:(.text+0xf): undefined reference to `std::cout'
... y así sucesivamente.
¿Cómo puedo vincular binarios usando las bibliotecas gfortran y g ++ juntas?
Excelente, gracias! También puedo usar gfortran pasando '-lstdC++'. – sverre