2011-04-14 20 views
28

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?

Respuesta

47

Está buscando g++ main.o print_hi.o -o main -lgfortran para enlazar en las librerías Fortran estándar.

+8

Excelente, gracias! También puedo usar gfortran pasando '-lstdC++'. – sverre

Cuestiones relacionadas