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