0

可能很多人都问过这个问题,但是,我从未见过有人给出令人满意的解决方案。好的,让我把我的问题说清楚:我试图从我现有的 fortran 代码中调用一些 c++ 子例程/函数。关键是我在 Visual Studio 2008 中做所有事情(fortran 编译器是 intel fortran 11.0)。谁能给我一步一步的指导,在同一个项目中编译两种语言?如果在一个项目中不可能做到这一点,我该怎么办?请显示一个示例代码,可能只有几行只是为了演示如何进行。

提前致谢。

欢迎任何想谈论这个的人。但很清楚,我正在寻找 Visual Studio 和 intel fortran 的解决方案(使用 GUI 编译和调试)。没有关于在 linux 中使用 gcc/gfortran 编译的废话。我读过很多这样的回应。

谢谢

4

3 回答 3

3

如果你只想要 C++ 的 C 特性,一般的方法是在你的 C++ 代码中使用 extern C。然后您可以在 Fortran 端使用 ISO C 绑定,并且 Fortran 语言标准要求 Fortran 和 C 可以互操作。在 Fortran 中,您声明一个接口来描述 C 例程。gfortran 手册中有 Fortran / C 代码示例……适用于所有编译器,因为它是语言的一部分。在 Intel(R) Fortran/C Mixed-Language Programming 下的 Intel 手册中有一些 Fortran/C 示例。在印刷版中,请参阅 Metcalf、Reid 和 Cohen 的 Fortran 95 书籍。对于特定于英特尔编译器的方面,英特尔论坛上有很多问题和答案。

于 2010-11-10T09:02:54.417 回答
3

您将无法从 Fortran 调用 C++。Fortran 不遵循 C++ 类的概念,没有模板的概念,没有异常的概念,并且不会正确维护 C++ 对象的生命周期。

您可以从您的 C++ 代码中公开一个 Fortran 可以调用的 C 接口。您可以将这样的代码编译为 a .dll,然后像在任何其他 dll 中一样在 dll 中加载和调用函数。但是,您必须查阅 Fortran 文档以了解如何在 DLL 中调用函数。

于 2010-11-10T06:02:38.760 回答
0

Fortran 编译器应该无关紧要,因为它们都是 COFF 对象格式。如果我正确理解您的问题,您正在尝试从 fortran 调用 c/c++,但您的主 gui 是 VS 2008。由于您的主 gui 是 vs 2008,我进一步假设您的主体源代码是 c/c++,并且您想调用调用 ac/c++ 例程的 fortran 例程。鉴于此,您需要首先使用 VS 2008 将您的 c/c++ 函数编译为目标文件。然后使用英特尔 Fortran 编译器将您的 fortran 例程编译为引用这些 c/c++ 函数(使用 c/c++ 目标文件)的目标文件. 现在应该会为您提供一个结合了 fortran 和 c/c++ 函数的新目标文件。现在,您可以将此目标文件与您的 Visual Studio 主体源代码一起使用。要记住的最重要的事情是,每当您编译为目标代码时,请确保静态链接运行时库。用于调用外部语言例程的编译器切换和语法,您必须自己找出,因为互联网上有大量材料。这是一个很好的参考http://docs.cray.com/books/S-2179-52/html-S-2179-52/ppgzmrwh.html

于 2011-12-13T17:36:16.047 回答