3

我正在尝试从 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. 在中心窗格中,选择空项目。
  4. 指定项目的名称,然后指定解决方案的名称。在解决方案框中选择“添加到解决方案”。选择确定按钮。

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

  1. 右键单击可执行的 Fortran 项目并选择 Dependencies 以将可执行项目设置为依赖于静态库项目。
  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   

有人可以帮我吗?任何建议将不胜感激。

4

1 回答 1

2

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

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