如何在Visual Studio 2010中混合使用Fortran和C++?

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. 在“新建项目”对话框的左窗格中,展开“已安装”,“模板”,“Intel(R) Visual Fortran”,然后选择“控制台应用程序”。 3. 在中心窗格中,选择“空项目”。 4. 指定项目名称,然后指定解决方案名称。在解决方案框中选择“添加到解决方案”。选择“确定”按钮。
此外,我在Visual Studio中进行了一些设置:
1. 右键单击可执行的Fortran项目,选择“依赖项”,将可执行项目设置为静态库项目的依赖项。 2. 右键单击可执行项目,选择“设置为启动项目”,以便您可以构建和调试它。
以下是我的Fortran主程序和C++函数:
    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个回答

2
您需要将C++库链接到Fortran可执行文件中。依赖项指定了构建顺序。
  1. 右键单击可执行的Fortran项目并选择属性。
  2. 添加包含构建C++库的目录到配置属性 -> 链接器 - 一般 -> 其他库目录(这一步可能不需要)。
  3. 将C++库.lib文件添加到配置属性 -> 链接器 -> 输入 -> 其他依赖项中。

如果这个答案解决了你的问题,请将其标记为答案并提出新的问题。 - Peter Petrik
我不知道“包含构建C++库的目录”和“C++库.lib”的位置在哪里。 - Mortezanamvar
C++库目录在哪里?请帮帮我,因为我是C++的初学者。 - Mortezanamvar
在你的项目目录中尝试搜索.lib文件怎么样? - Peter Petrik
对于 Intel Fortran 项目,指定另一个项目作为依赖通常会自动导致该其他项目的输出包含在链接步骤中。 - IanH
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接