web-dev-qa-db-fra.com

Lier les binaires Fortran et C ++ à l'aide de gcc

Je peux utiliser gcc pour effectuer des appels entre C et C++ ou entre C et Fortran en utilisant g ++ ou gfortran, respectivement. Mais si j'essaie de faire des appels de procédure entre C++ et Fortran, j'obtiens des erreurs lors de la compilation avec g ++ ou gfortran car aucun ne connaît les autres bibliothèques requises.

Comment lier un projet qui utilise du code source écrit en C++ et Fortran?

$ 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

J'essaie de créer un lien avec 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'

et d'autres erreurs concernant les références non définies.

Et avec gfortran:

$ gfortran main.o print_hi.o -o main
main.o: In function `main':
main.cpp:(.text+0xf): undefined reference to `std::cout'

...et ainsi de suite.

Comment lier des fichiers binaires en utilisant les bibliothèques gfortran et g ++ ensemble?

39
sverre

Vous cherchez g++ main.o print_hi.o -o main -lgfortran pour créer un lien dans les bibliothèques Fortran standard.

Vous pouvez également utiliser gfortran en passant -lstdc++.

60
Jonathan Dursi