如何在visual studio 2010中混合使用fortran和C ++?

时间:2014-08-19 08:42:08

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

我试图从Fortran主程序中调用c ++函数。要做到这一点,我按照Visual Studio 2010中的下面的步骤: 创建C ++静态库项目

  1. 在菜单栏上,选择“文件”,“新建”,“项目”。
  2. 在“新建项目”对话框的左窗格中,展开“已安装”,“模板”,“Visual C ++”,然后选择“Win32”。
  3. 在中心窗格中,选择“Win32控制台应用程序”。
  4. 在“名称”框中指定项目的名称,例如MathFuncsLib。指定解决方案的名称 - 例如,在“解决方案名称”框中输入StaticLibrary。选择确定按钮。
  5. 在Win32 Application Wizard对话框的Overview页面上,选择Next按钮。
  6. 在“应用程序设置”页面的“应用程序类型”下,选择“静态库”。
  7. 在“应用程序设置”页面的“其他选项”下,清除“预编译标题”复选框。
  8. 选择“完成”按钮以创建项目。
  9. 创建可执行的Fortran项目

    1. 在菜单栏上,选择“文件”,“新建”,“项目”。
    2. 在“新建项目”对话框的左侧窗格中,展开“已安装”,“模板”,“英特尔(R)Visual Fortran”,然后选择“控制台应用程序”。
    3. 在中心窗格中,选择清空项目。
    4. 指定项目的名称,然后指定解决方案的名称。在解决方案框中,选择"添加到解决方案"。选择确定按钮。
    5. 另外我在Visual Studio中做了一些设置如下:

      1. 右键单击可执行的Fortran项目,然后选择Dependencies将可执行项目设置为依赖于静态库项目。
      2. 右键单击可执行项目,然后选择Set as Startup Project,以便您可以构建它并进行调试。 我有以下Fortran主程序和C ++函数。
      3. 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   
        

        有人能帮帮我吗?任何建议都会非常感激。

1 个答案:

答案 0 :(得分:2)

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

  1. 右键单击可执行的Fortran项目,然后选择“属性”
  2. 将包含构建C ++库的目录添加到配置属性 - &gt;链接器 - 一般 - &gt;其他图书馆目录(可能不需要此步骤)
  3. 将C ++库.lib文件添加到配置属性 - &gt;链接器 - &gt;输入 - &gt;额外的Dependancies