2

我正在尝试为 C++ 代码制作一个 Fortran 77 包装器。我还没有找到有关它的信息。这个想法是使用来自一个库中的函数,该库是在 Fortran 77 程序中用 C++ 编写的。

有谁知道该怎么做?谢谢!

4

2 回答 2

2

Lawrence Livermore National Laboratory developed a tool called Babel for integrating software written in multiple languages into a single, cohesive application. If your needs are simple you can probably just put C wrapper on your C++ code and call that from Fortran. However, if your needs are more advanced, it might be worth giving Babel a look.

于 2010-07-12T17:19:22.803 回答
1

从 C 调用 Fortran 很容易,从 Fortran 调用 C 可能很棘手,从 Fortran 调用 C++ 可能会变得……具有挑战性。

我在别处有一些笔记。这些已经很老了,但在这类领域没有什么变化很快,所以那里可能仍然有一些有用的指针。

不幸的是,没有真正的标准方法可以做到这一点,不同的编译器可能会略有不同。话虽如此,只有在传递字符串时,您可能会遇到严重的头痛。上面的资源指向一个名为CNF的库,该库旨在提供帮助,主要是通过提供 C 宏来完善簿记。

然而,简短的版本是这样的:

  • 浮点数和整数通常很容易——整数或多或少都是整数。
  • 字符串很难(因为 Fortrans 经常将它们存储为结构,而很少存储为 C 风格的以空值结尾的数组)。
  • C 是按值调用,Fortran 按引用调用,这意味着从 C 的角度来看,Fortran 函数始终是指向值的指针。
  • 您必须关心编译器如何生成符号:编译器通常将 C/Fortran 符号foo转换为_fooorfoo_或其他一些变体(请参阅编译器文档)。
  • C 往往没有太多的运行时,C++ 和 Fortran 有,所以你必须记住在链接时以某种方式链接它。

这是您需要知道的大部分内容。剩下的就是烦人的细节,并与您的编译器和链接器文档交朋友。您最终会比您可能想要的更多地了解链接器。

于 2010-07-12T16:46:38.780 回答