Vinculando binários fortran e c ++ usando gcc
Eu posso usar o gcc para fazer chamadas entre c e c ++ ou entre c e fortran usando g ++ ou gfortran, respectivamente. Mas se eu tentar fazer chamadas de procedimento entre c ++ e fortran, recebo erros ao compilar com g ++ ou gfortran, porque nenhum deles conhece as bibliotecas necessárias do outro. Como vincular um projeto que usa o código-fonte escrito em c ++ e fortra
$ 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
Tento vincular com 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'
e mais erros relacionados a referências indefinida
E com gfortran:
$ gfortran main.o print_hi.o -o main
main.o: In function `main':
main.cpp:(.text+0xf): undefined reference to `std::cout'
...e assim por diante
Como vincular binários usando as bibliotecas gfortran e g +