我正在尝试从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++函数:
创建一个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
有人能帮我吗?任何建议都会非常感激。
.lib
文件怎么样? - Peter Petrik