帖主目前使用的编译器是Intel(R) Visual Fortran Intel(64位),现在想通过该编译器在命令行下对源文件subtest.f90进行编译并生成动态库文件,再在另一个主程序main.f90中调用该动态库文件中的函数。
subtest.f90中的内容非常简单,只包含一个subroutine,其功能是输入圆的半径R,计算其面积S,以下该源文件的代码:
[Fortran] 纯文本查看 复制代码 subroutine SUB(S,R)
!程序作用是根据传入的圆的半径R,计算圆的面积S
!DEC$ ATTRIBUTES DLLEXPORT :: SUB
!上面的语句是编译功能语句,DLL中可以被外界调用的函数都要写上面的语句,声明哪些函数可以被外界访问,不然外界无法访问。
implicit none
double precision S,R
write(*,*)"You are using subroutline in DLL"
S=3.141592653*R**2!计算的面积可以通过传址传出去
return
end
编写完subtest.f90后,我在命令行下通过IVF编译器,输入指令:ifort /dll /fPIC /o subtest.dll subtest.f90,成功生成了三个同名的.dll,.lib和.exp文件。
主程序main.f90也非常简单,只起到调用该动态库中的SUB(S,R)子程序并显示计算结果的作用,以下是相关代码:
[Fortran] 纯文本查看 复制代码 program main
!!DEC$OBJCOMMENT LIB:'Dll1.lib'
! !DEC$OBJCOMMENT LIB:'dllcmd.lib'
!DEC$OBJCOMMENT LIB:'subtest.lib'
implicit none
interface
subroutine SUB(S,R)
!DEC$ ATTRIBUTES DLLEXPORT :: SUB
real*8 s,r
end subroutine
end interface
real*8 rad,area
rad=10.0
call SUB(area,rad)
write(*,*)'计算结果为:',area
end program
|