在Fortran90中调用同一模块中的功能

时间:2011-09-07 10:41:17

标签: function dll module fortran fortran90

我是Fortran90的新手,我没有找到问题的答案。 我有一个用Fortran编写的模块,模块中有一些函数。

剥离版本:

module vdiStringFunctions

interface vdiString module procedure vdiString1Char end interface

contains character (128) function vdiString1Char(CSTRING, sVar1) character(*), intent(in) :: CSTRING, sVar1 character(128) :: vdiStringGeneral character(len=128), dimension(0:9) :: stringArray

stringArray(0) = adjustl(sVar1) vdiString1Char= vdiStringGeneral(CSTRING, stringArray) end function vdiString1Char character (128) function vdiStringGeneral(CSTRING, varArray) character(*), intent(in) :: CSTRING character(len=128), dimension(0:9), intent(in) :: varArray vdiStringGeneral = 'bla' end function vdiStringGeneral

结束模块vdiStringFunctions

当我尝试使用英特尔Visual Fortran XE 2011进行编译时,出现以下错误:

  

错误LNK2019:函数中引用的未解析的外部符号_VDISTRINGGENERAL _VDISTRINGFUNCTIONS_mp_VDISTRING1CHAR vdiStringFunctions.obj

因为函数vdiStringGeneral与调用vdiString1Char在同一模块中,所以我没有遇到问题。 当我将vdiStringGeneral移动到模块之外时,它会毫无问题地编译。

因为它应该在DLL中使用,所有函数都应该在模块内部。 我怎样才能让它以这种方式工作?

1 个答案:

答案 0 :(得分:4)

删除功能vdiStringGeneral中的vdiString1Char声明。 vdiStringGeneral的接口已经是显式的,因为它是在同一个模块中定义的。 通过现在的声明,链接器正在寻找外部函数。