gpt4 book ai didi

c++ - F77 和 C++ 混合

转载 作者:行者123 更新时间:2023-11-30 18:28:52 24 4
gpt4 key购买 nike

我想从 F77 主程序调用 C++ 函数。我在主程序中定义了:

DOUBLE PRECISION FC34F, bf_Fc34F

然后调用电话

FC34F = bf_Fc34F( temp )

函数bf_Fc34F是*.C文件中的C函数,定义为

double bf_Fc34F_( double T ){
T="some_mathematical_expression";
return T;
}

我正在使用 g++/gfortran,并且在编译 *.C 文件 (g++ -c *.C) 时,*.o 文件附加了一个尾随“_d”(我认为是“double”),其中主程序没有,因此我收到“ undefined reference ”错误。

有谁知道如何解决这个问题吗?

最佳答案

您需要从 Fortran 和 C++ 双方处理互操作性(主要是名称修改):

  • 在 C++ 中使用 extern "C"
  • 在 Fortran 中,定义一个指向函数的显式接口(interface),指定 bind(C) 并使用可互操作类型

C++ 代码:

#include<iostream>
using namespace std;
extern "C" {
double bf_Fc34F( double T ){
T=T*T;
cout << " from c++ - T: " << T << endl;
return T;
}
}

Fortran 代码:

program fc34f_test

double precision FC34F

interface
function bf_Fc34F(T) bind(C,name="bf_Fc34F")
use iso_c_binding
real(C_DOUBLE) :: bf_Fc34F
real(C_DOUBLE), value :: T
end function
endinterface

FC34F = bf_Fc34F(2.d0)

print*,"from Fortran - FC34F: ", FC34F

end program fc34f_test

编译:

g++ -c fun.C ; gfortran -c main.f90 ; g++ fun.o main.o -o exe -lgfortran

执行:

./exe

关于c++ - F77 和 C++ 混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43927334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com