Я должен соединить linux
один код C++ со старым кодом fortran
, где fortan
— основной код. Я не специалист в этой области и пытаюсь начать с простого теста, но не могу его скомпилировать. Может я туплю, но нигде не могу найти рабочий пример. Мне удалось скомпилировать fortran и c, когда компоновку можно выполнить с помощью ifort (позже нужно будет использовать компилятор Intel с фактическим кодом fortran). Но если я правильно понял, с c++
линковку должен делать c++
компилятор (g++
).
Итак, что я делаю неправильно здесь:
Мой тестовый код FORTRAN "ftest.f":
PROGRAM MAIN
IMPLICIT NONE
INTEGER I
write(*,*) "hello fortran1"
CALL ctest()
write(*,*) "hello fortran2"
END PROGRAM
И код C++ "ctest.cpp"
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <iostream>
extern "C" void ctest_();
void ctest_(){
int i;
// std::cout << "hello c \n";
printf("hello c\n");
}
Я пытаюсь скомпилировать со следующим:
ifort -c ftest.f
g++ -c ctest.cpp
g++ -ldl -lm -limf -L -l -lifcore ctest.o ftest.o
И получаю ошибку:
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status
Итак, что я должен сделать, чтобы успешно связать эту программу?