Связывание двоичных файлов с помощью fortran и c ++ с использованием gcc - PullRequest
35 голосов
/ 14 апреля 2011

Я могу использовать 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 main.o print_hi.o -o main
main.o: In function `main':
main.cpp:(.text+0xf): undefined reference to `std::cout'

... и т. Д.

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

1 Ответ

53 голосов
/ 14 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...