Связывание fortran и С++ двоичных файлов с использованием gcc

Я могу использовать gcc для совершения вызовов между c и С++ или между c и fortran с помощью g++ или gfortran, соответственно. Но если я пытаюсь сделать вызовы процедур между С++ и fortran, я получаю ошибки при компиляции с помощью g++ или gfortran, потому что не знает о других необходимых библиотеках. Как я могу связать проект, который использует исходный код, написанный как в С++, так и 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
</iostream>

Я пытаюсь установить связь с 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'

и дальнейшие ошибки в отношении ссылок undefined.

И с gfortran:

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

... и т.д.

Как связать двоичные файлы с помощью библиотек gfortran и g++?

1 ответ

Вы ищете g++ main.o print_hi.o -o main -lgfortran для связи в стандартных библиотеках Fortran.

licensed under cc by-sa 3.0 with attribution.