Linking Fortran and C++ binaries using gcc

34,182

You're looking for g++ main.o print_hi.o -o main -lgfortran to link in the standard Fortran libraries.

You can also use gfortran by passing -lstdc++.

Share:
34,182
sverre
Author by

sverre

Updated on July 11, 2022

Comments

  • sverre
    sverre almost 2 years

    I can use gcc to make calls between C and C++ or between C and Fortran by using g++ or gfortran, respectively. But if I try to make procedure calls between C++ and Fortran I get errors when compiling with either g++ or gfortran because neither knows about the other's required libraries.

    How can I link a project that uses source code written in both C++ and 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
    

    I try linking with 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'
    

    and further errors regarding undefined references.

    And with gfortran:

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

    ...and so forth.

    How can I link binaries using the gfortran and g++ libraries together?

  • sverre
    sverre about 13 years
    Excellent, thanks! I can also use gfortran by passing -lstdc++ .