当前位置:硬件测评 > vs2010可以写fortran吗_VS2010环境下链接IVF2011编译的Fortran静态库的问题

vs2010可以写fortran吗_VS2010环境下链接IVF2011编译的Fortran静态库的问题

  • 发布:2023-09-29 14:17

Windows 10下用VS2010+IVF作为编译器的Fortran的MPI配置

这是我第一次在CSDN上写东西。我很高兴认识大家。之前花了很多时间在win10下配置fortran MPI环境。我尝试了mpich和msmpi的各种方法但报错。我尝试了各种版本,但问题仍然没有解决。后来FQ找到了办法。很简单,我来给大家分享一下。

首先要注意版本问题,否则可能版本不兼容。我正在使用 VS2010 和 IVF2011。我不知道为什么我无法安装mpich(我问了老大,原因好像是因为我下载的版本太旧)它不支持win10,但我的vs只有2010所以我没有选择) ,所以我必须下载msmpi。 MPI官网下载的版本是HPC Pack 2008 R2。下载地址在这里 https://www.sychzs.cn/zh-cn/download/details.aspx?id=14737 下载后直接安装即可。建议遵循默认设置。

下面介绍VS中的设置

创建一个新的空项目,如下所示。随意创建一个新的源文件。右键单击创建的项目,点击“属性”,选择左侧的调试,在相应的界面中进行如下更改。 4.1 修改命令为:mpiexec.exe; 4.2 将命令参数修改为:-n 4 $(TargetPath)。 (熟悉mpi的朋友一定会注意到,这里的-n 4表示使用4个核心,如果你的电脑有更多核心,想要投入使用,这里的设置需要修改)选择左侧General下的Linker ,将Additional Library Directorys更改为:$(MSMPI_LIB32) 在Linker下选择Input,将Additional Dependence修改为:msmpi.lib msmpifec.lib。您还需要将 MSMPI 模块定义添加到您的项目中,选择“在源文件中添加现有项目”,找到 mpi.f90 并添加它。由于我的按照默认安装路径是在C盘,所以我的路径是“C:\Program Files\Microsoft HPC Pack 2008 R2\Inc”,选择mpi.f90,添加即可。

大功告成,可以开始愉快的使用啦!

该版本无法在VS2010中运行调试。对于我这样的新手来说还不够(其实我也不知道这个debug是干什么用的),但反正是可以运行的!只需测试 Hello world 部分即可。

程序测试乐趣

写(*,*)“世界你好!”

节目结束

直接开始执行(无需调试),结果如下。需要注意的是,其他mpi头文件会在下载的msmpi文件夹中。调用的时候最好把它们复制到项目文件夹下,然后添加到项目中,防止被发现。 。

就是这样。如有错误,欢迎大家批评指正★,°:.☆( ̄▽ ̄)/$:.°★。

已于2020.4.16修正

由于上面mpi的下载链接已经过期,新版本的msmpi安装包总是存在各种bug。经过多方查找,终于找到了合适的安装包。链接如下。链接:https://www.sychzs.cn/s/1hjdjHPXC5urNW1CgdQhKpg 提取码:mejl 谢谢大家!

星星侠制作版权所有

本教程包含以下内容:

Visual studio 2010 如何创建新的c++项目1

Visual studio 2010 如何创建新的 FORTRAN 项目 9

如何在 Visual studio 2010 中创建新的 C++ 项目

打开Visual studio 2010并在起始页上选择“新建项目”

选择模板时,选择“Visual c++”,然后选择“Win32 Console Application”,然后输入文件名,然后

单击“确定”。

1 / 11

星星侠制作版权所有

在弹出的设置窗口中选择“下一步”。

选择“控制台应用程序”作为应用程序类型,并选择“空项目”作为附加选项

项目)"【务必选择空项目】。

2 / 11

星星侠制作版权所有

单击“连接项目”窗口右上角的“关闭”。

将鼠标移至显示窗口左侧,会弹出“解决方案探索”标签【程序

默认是浮动的,鼠标放在上面会自动显示,移动会自动折叠],就项目文件名

(或“源文件”)单击鼠标右键,将鼠标置于弹出窗口中的“添加(新建)”上方,然后单击

在一级菜单中选择“新建项目”并点击。

3 / 11

星星侠制作版权所有

然后就可以看到新项目窗口&

转载自博客http://www.sychzs.cn/s/blog_6798850f0101daea.html

已知: ?主程序全部C++源代码?????????静态库全部Fortran源代码 工具:?编译器:MS Visual?C++ 2010(x86)?????? ?编译器:Intel Visual Fortran 2011(x86),即 IVF 12 ?????????IDE:Microsoft Visual Studio 2010

问:C++代码中需要调用Fortran子程序。由于 Visual Studio 不再包含 Fortran 编译器,因此无法进行混合编译。唯一的方法是首先将Fortran代码编译成静态库,然后从C++代码中调用它。问题是Fortran子例程可以成功编译成静态库(.lib文件),但无法在C++项目中调用。总是提示“无法解析的外部符号_XXX,在函数_XX中引用”。

?

?????第一次遇到这个问题的时候,我在百度和谷歌上搜索了一下,发现唯一的参考信息来自于

?????http://www.sychzs.cn/bbstcon?board=VS&reid=1292155137 ?????但是,遗憾的是,按照这位华人兄弟的提示,还是不行,仍然提示“Unable Resolved external symbol _XXX, which is referenced in function _XX”。于是我继续Google,找到了国外专家的答案,读了一下,发现OK,问题解决了,总结如下:

??????1. Fortran子程序的声明Subroutine?ffun一般采用以下格式声明

???????????????extern "C" void?__stdcall?FFUN(int& i);???//FFUN 应该大写

??????然后按照FFUN(a)来使用,这也是彭国伦的Fortran95编程书上讲的方法。该操作在VC6.0中可以正常使用,但在VS2010中则不行。在VS2010中如果声明为__stdcall,FFUN会被编译成?FFUN@4?,在Fortran中也会被编译成FFUN,所以还是提示“无法解析的外部符号FFUN@4,该符号在函数_XX中被引用” 》,如果声明为__cdecl或者直接省略这部分声明,则不存在这个问题。因此,在VS2010中,Fortran子程序不能再声明为__stdcall,而是声明为

?????????????????? extern "C" void FFUN(int *a);

??????2.为C和Fortran项目指定不同的运行时库 - 这些必须一致

????????????您可以将两个项目中的运行时库设置更改为“多线程”(不是多线程 DLL),它应该可以执行您想要的操作。

是什么意思?意思是?编译Fortran静态库时,需要将Project->Properties->c/c++->Code Generation->Runtime Library设置为多线程调试(在Debug下),而不是多线程调试DLL。同时,调用Fortran静态库的C++项目中也必须进行相同的设置。

?????????3.libifcoremt.lib 在 C 项目中明确列为附加依赖项 - 删除 ?????????msvcrt.lib 在 C 项目中列为“忽略” - 删除

????????????编译时,有时会出现“无法打开文件ifconsol.lib?”之类的情况。在这种情况下,您需要添加库路径和额外的依赖项来解决问题。有时会提示库冲突。华哥的解决办法是从项目中排除默认库。不过,如果设置了“多线程调试的运行时库”,基本上就不会出现这个问题了,而且老外明确指出要删除被忽略的库(msvcrt.lib在C项目中列为“忽略”-删除)。

??????这个问题基本解决了。注:我也是通过尝试和错误来学习的。我只是记录下来作为我自己的笔记。希望大神们不要批评我。

?

老外论坛参考:http://www.sychzs.cn/en-us/forums/topic/275962

相关文章

最新资讯