【问题标题】:how to mix fortran and C++ in visual studio 2010?如何在 Visual Studio 2010 中混合 fortran 和 C++?
【发布时间】:2014-08-19 08:42:08
【问题描述】:

我正在尝试从 Fortran 主程序调用 c++ 函数。为此,我在 Visual Studio 2010 中按照以下步骤操作: 创建 C++ 静态库项目

  1. 在菜单栏上,依次选择“文件”、“新建”、“项目”。
  2. 在“新建项目”对话框的左窗格中,展开“已安装”、“模板”、“Visual C++”,然后选择“Win32”。
  3. 在中心窗格中,选择 Win32 控制台应用程序。
  4. 在“名称”框中为项目指定一个名称,例如 MathFuncsLib。在解决方案名称框中指定解决方案的名称,例如 StaticLibrary。选择“确定”按钮。
  5. 在 Win32 应用程序向导对话框的概述页面上,选择下一步按钮。
  6. 在应用程序设置页面的应用程序类型下,选择静态库。
  7. 在“应用程序设置”页面的“附加选项”下,清除“预编译标头”复选框。
  8. 选择完成按钮以创建项目。

创建可执行的 Fortran 项目

  1. 在菜单栏上,依次选择“文件”、“新建”、“项目”。
  2. 在“新建项目”对话框的左侧窗格中,展开“已安装”、“模板”、“英特尔(R) Visual Fortran”,然后选择“控制台应用程序”。
  3. 在中心窗格中,选择 Empty Project。
  4. 为项目指定一个名称,然后为解决方案指定一个名称。在解决方案框中选择“添加到解决方案”。选择“确定”按钮。

此外,我在 Visual Studio 中做了一些设置,如下所示:

  1. 右键单击可执行的 Fortran 项目并选择依赖项,将可执行项目设置为依赖于静态库项目。
  2. 右键单击可执行项目并选择设置为启动项目,以便您可以构建和调试它。 我有以下 Fortran 主程序和 C++ 函数。

Fortran 程序

    program main

      use iso_c_binding, only : C_CHAR, C_NULL_CHAR

      implicit none

      interface
        subroutine print_C ( string ) bind ( C, name = "print_C" )
          use iso_c_binding, only : C_CHAR
          character ( kind = C_CHAR ) :: string ( * )
        end subroutine print_C
      end interface

      call print_C ( C_CHAR_"Hello World!" // C_NULL_CHAR )

    end

C++ 函数

# include <stdlib.h>
# include <stdio.h>

extern "C" void print_C (char *text)
{
  printf("%s\n", text);
}

当我构建程序时,我会遇到以下错误:

Error 1: error LNK2019: unresolved external symbol _print_C referenced in function _MAIN__  Fortranmain.obj 
Error 2: fatal error LNK1120: 1 unresolved externals    Debug\Fortranmain.exe   

谁能帮助我?任何建议将不胜感激。

【问题讨论】:

    标签: c++ fortran fortran-iso-c-binding


    【解决方案1】:

    您需要将 C++ 库链接到 Fortran 可执行文件。依赖项正在指定构建顺序。

    1. 右键单击可执行的 Fortran 项目并选择属性
    2. 将包含构建 C++ 库的目录添加到配置属性 -> 链接器 - 常规 -> 附加库目录(此步骤可能不需要)
    3. 将 C++ 库 .lib 文件添加到配置属性 -> 链接器 -> 输入 -> 附加依赖项

    【讨论】:

    • 好。如果它解决了您的问题,请将此答案标记为答案并提出新问题
    • 我不知道“包含构建C++库的目录”和“C++库.lib”在哪里。
    • C++ 库目录在哪里?请帮助我,因为我是 C++ 的初学者
    • 尝试在您的项目目录中搜索.lib 文件怎么样?
    • 我已经这样做了,但是链接器不起作用。有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 2011-03-25
    相关资源
    最近更新 更多