fortran — ошибки при связывании кода C ++ и Fortran90

Поэтому я работаю над попыткой связать два простых кода, один в C ++, а другой в Fortran90. Я провел последние несколько дней, просматривая Интернет, и все, что я видел, заставляет меня выглядеть так, как я делаю должен работа, но я здесь так очевидно, что это не так. Вот что у меня есть

Код C ++: BasicFusion.cpp

#include <iostream>
#include <fstream>
using namespace std;

extern "C"{
void Fusion_(double *T, double *dens);
}

void Fusion_(double *T, double *dens)
{
double dT;
FILE *fp;
fp = fopen("Temp.dat","a");

dT = *dens * 1.46e-9;
*T = *T + dT;

cout << "The new Temperature is: " << T << endl;
fprintf(fp, "%f \n" T);
fclose(fp);
}

Код Фортрана: BasicHydro.f90

program BasicHydro
implicit none

double precision :: R
double precision :: rho
double precision :: T = 1.0d4
double precision :: M = 2.0d30
double precision :: G = 6.67d-11
double precision :: k = 1.381d-23
double precision :: pi = 3.14159265359d0
integer :: i

do i=1,10,1
open(1,file='density.dat',action='write',position="append")
R = (75/(4*pi))*((k*T)/(G))**2

write(*,*) 'The new density is',rho

write(1,*) rho
close(1)
call Fusion(T,rho)
end do
end program BasicHydro

В командной строке я ввожу:

>g++ -c BasicFusion.cpp
>gfortran -c BasicHydro.f90
>gfortran -o HydroThermo BasicFusion.o BasicHydro.o -lstdc++

Я также использовал ifort вместо gfortran, используя те же теги и файлы. В обоих случаях я получаю одну и ту же ошибку:

BasicHydro.o: In function `MAIN__':
BasicHydro.f90:(.text+0x27d): undefined reference to `fusion_'

Ни один из примеров, которые я видел, не содержал ссылки в коде на языке Фортран на программу C ++, хотя они использовали одну и ту же структуру, чтобы выложить все.

2

Решение

Так что мой советник только что зашел, и после просмотра какой-то другой документации оказалось, что, поскольку Fortran не зависит от регистра, он автоматически делает все в нижнем регистре. Так как я определил Fusion в верхнем регистре F, в объектном файле C ++ он был в верхнем регистре. Поэтому, когда я попытался запустить все это, часть fortran искала fusion, а в части c ++ был только Fusion …

Мораль этой истории: делайте все строчными буквами все время.

1

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

Других решений пока нет …

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