Fortran .exe不再是“自足的”?

时间:2014-02-12 18:20:04

标签: visual-studio fortran

我使用一个小型内部集群(大约31台机器)来帮助完成数值地下水模型的并行运行。在地下水模型完成之后,一个短的后处理器操纵一些数据以供从并行运行中收集输出的代码使用。它曾经是后处理器,用fortran编写,并使用来自Vis内部的英特尔视觉堡垒编译。 Studio 2010是可分发的,这意味着我可以将.exe放在分布在群集中并在各种计算机上运行的其他文件中。但是,现在,如果我使用Visual Studio 2012与英特尔Fortran XE 2013编译完全相同的fortran,我在群集计算机上收到错误,指出“程序无法启动,因为您的计算机缺少MSVCRR110.dll。请尝试重新安装解决这个问题的计划。“

我喜欢使用Fortran的原因之一是它曾经是自包含的。换句话说,如果我编写小程序用另一种语言(比如R或Python)做一些简短的简单任务,那么我必须在所有集群机器上安装这些程序,或者用我的分布式文件“沙盒化”程序。忘记尝试使用C#或VB等,因为集群机器需要安装.NET框架。目前我可以回去使用VS2010进行编译,但我预计这个选项可以使用的时间更长。还有另一种选择让在Fort2012中保持Fortran程序“自包含”吗?正如您在下面的代码中看到的那样,没有任何复杂的,也没有理由不将它作为一个独立的可执行文件:

program Calc_Seep

implicit none

! Variables
integer       reason
real          wp,time,ft,fts,fr,fo,fst,fro,loss1,loss2,loss3
character (len=120) line
character*50  txt
character*20  fmt

wp = 9.38              !a needed constant value
!read(*,*) txt
open(5,file='balance.out') 
read(5,'(A)') line

do while (.NOT.line.EQ.'')
    read(5,'(A)',IOSTAT=Reason) line
    if (Reason < 0) exit
end do

read(line,*)  time,ft,fts,fr,fo,fst,fro

!acre-ft/mi/yr
loss1 = (ft/time)*0.3048*5280*208*24/(0.3048**3)/43560.17
!ft/day
loss2 = (ft/time)*24/(0.3048**2)/wp
!cfs/mi
loss3 = (ft/time)*24/(0.3048**2)*5280/86400

close(5)

!now write the processed values to a file
open(5,file="Seepage.out")
write(5,'(A)') "acre-ft/mi/yr       ft/day       cfs/mi"
write(5,100) loss1, loss2, loss3
100 format(3f13.6)
close(5)

end program Calc_Seep

1 个答案:

答案 0 :(得分:2)

这只是对新创建项目的默认项目属性的更改。从英特尔Visual Fortran Composer XE 2013 SP1(编译器版本14)开始,默认链接DLL库,与MS Visual C ++的作用相匹配。现有项目不受影响,您仍然可以从“多线程DLL”将库设置(Fortran&gt; Libraries&gt; Runtime Library)更改为“Multithreaded”。如果你这样做,那么它将再次链接到静态库,尽管有一些库只以DLL形式提供(OpenMP和coarray支持)。