g ++ — объединение FORTRAN и C ++, ошибка компоновки

Я должен пара в 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

Итак, что я должен сделать, чтобы связать эту программу?

2

Решение

Ваш основной (вход) находится в части Фортрана, поэтому один из способов решить это — использовать ifort linker вместо g ++ (это также автоматически связывало бы ifcore)

ifort ctest.o ftest.o ... -lstdc++
4

Другие решения

Похоже, я слишком доверял одной странице, говоря мне, что для компоновки мне нужно использовать компилятор c ++. Раньше просто всегда что-то еще было не так при попытке связать с помощью ifort.

Так что использование ifort с -lstdc ++ действительно достаточно для текущей версии моего тестового кода. Раньше просто что-то еще было не так.

Большое спасибо еще раз, я желаю вам всего наилучшего в ваших собственных проектах!

0

По вопросам рекламы [email protected]