链接C ++和Fortran90代码时出错

时间:2016-07-05 17:22:29

标签: c++ fortran 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);
}

Fortran代码: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_'

我见过的所有例子都没有在Fortran代码中引用C ++程序,而他们使用相同的结构来解决所有问题。

1 个答案:

答案 0 :(得分:1)

所以我的顾问只是停下来,经过一些其他文档之后,似乎由于Fortran不依赖于案例,它会自动使所有内容都小写。因为我用大写字母F定义了Fusion,所以C ++对象文件有一个上面的F.所以当我试图运行整个东西时,fortran部分正在寻找融合,而c ++部分只有Fusion ...

故事的道德:一直把一切都放在小案子里。

相关问题