使用Fortran调用C++函数

Dan*_*sen 4 c++ fortran

我正在尝试使用一些FORTRAN代码来调用我编写的几个c ++函数(c_tabs_就是其中之一).链接和一切工作正常,只要我调用不属于类的函数.

我的问题是我希望FORTRAN代码调用的函数属于一个类.我使用nm查看符号表,函数名称就像这样丑陋:

00000000 T _ZN9Interface7c_tabs_Ev
Run Code Online (Sandbox Code Playgroud)

FORTRAN不允许我用这个名字来调用函数,因为开头有下划线,所以我很茫然.

当c_tabs不在类中时,它的符号非常简单,FORTRAN对它没有任何问题:

00000030 T c_tabs_
Run Code Online (Sandbox Code Playgroud)

有什么建议?提前致谢.

小智 7

这个名称已被破坏,这是C++编译器所做的功能,允许函数重载和类型安全链接等功能.坦率地说,你极不可能从FORTRAN调用成员函数(因为FORTRAN不能创建C++类实例,除其他原因外) - 你应该用C API来表达你的接口,它可以从几乎任何地方调用.


M. *_* B. 3

如果您使 C++ 例程具有 C 风格的接口(如前所述),则可以使用 Fortran 2003 的 ISO C 绑定功能来调用它。通过 ISO C 绑定,您可以指定例程的名称以及(在限制范围内)参数和函数返回的 C 类型和调用约定(引用、按值)。与从 Fortran 调用 C 的旧方法不同,此方法运行良好,并且具有作为标准的优点,因此依赖于编译器和平台。许多 Fortran 95 编译器都支持 ISO C 绑定,例如 gfortran >= 4.3。