【问题标题】:Call C/C++ code from a Fortran 77 code从 Fortran 77 代码调用 C/C++ 代码
【发布时间】:2010-07-12 16:14:35
【问题描述】:

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

有人知道怎么做吗? 谢谢!

【问题讨论】:

  • 对不起,你的老板一定很讨厌你,或者你只是很讨厌自己。但是这个页面可能有用-yolinux.com/TUTORIALS/LinuxTutorialMixingFortranAndC.html
  • 如果您告诉我们您正在处理的确切 C++ 和 f77 编译器可能会有所帮助。
  • 这应该很简单——只要记住 C 数组是行优先的,FORTRAN 数组是列优先的。
  • 考虑坚持使用更现代的 fortran,C 和 fortran 之间的“绑定”更容易(现代 fortran 编译器也应该编译旧的 f77 代码,此外您可以开始使用一些更新的功能);即使从 f77 调用 C 代码也不是太难,但我认为处理 C++ 类要困难得多......另请阅读this(这是相反但有趣的阅读)
  • 任何答案都将取决于实现(尽管许多实现可能有相同的答案),因此为了帮助我们确实需要了解正在使用的操作系统和正在使用的编译器.

标签: c++ c wrapper fortran77


【解决方案1】:

劳伦斯利弗莫尔国家实验室开发了一个名为 Babel 的工具,用于将用多种语言编写的软件集成到一个单一的、有凝聚力的应用程序中。如果您的需求很简单,您可能只需将 C 包装器放在您的 C++ 代码中,然后从 Fortran 调用它。但是,如果您的需求更高级,可能值得给Babel 看看。

【讨论】:

    【解决方案2】:

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

    我有一些笔记elsewhere。这些都是相当古老的,但在这类领域没有什么变化很快,所以那里可能仍然有一些有用的指针。

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

    简短的版本是这样的:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 1970-01-01
      相关资源
      最近更新 更多