我正在尝试从 Fortran 主程序调用 c++ 函数。为此,我在 Visual Studio 2010 中按照以下步骤操作:创建 C++ 静态库项目
- 在菜单栏上,选择文件、新建、项目。
- 在“新建项目”对话框的左窗格中,展开“已安装”、“模板”、“Visual C++”,然后选择“Win32”。
- 在中心窗格中,选择 Win32 控制台应用程序。
- 在名称框中指定项目的名称,例如 MathFuncsLib。在解决方案名称框中指定解决方案的名称,例如 StaticLibrary。选择确定按钮。
- 在 Win32 应用程序向导对话框的概述页面上,选择下一步按钮。
- 在应用程序设置页面的应用程序类型下,选择静态库。
- 在“应用程序设置”页面的“附加选项”下,清除“预编译标头”复选框。
- 选择完成按钮以创建项目。
创建可执行的 Fortran 项目
- 在菜单栏上,选择文件、新建、项目。
- 在“新建项目”对话框的左窗格中,展开“已安装”、“模板”、“英特尔(R) Visual Fortran”,然后选择“控制台应用程序”。
- 在中心窗格中,选择空项目。
- 指定项目的名称,然后指定解决方案的名称。在解决方案框中选择“添加到解决方案”。选择确定按钮。
此外,我在 Visual Studio 中进行了一些设置,如下所示:
- 右键单击可执行的 Fortran 项目并选择 Dependencies 以将可执行项目设置为依赖于静态库项目。
- 右键单击可执行项目并选择设置为启动项目,以便您可以构建和调试它。我有以下 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
有人可以帮我吗?任何建议将不胜感激。