我是Fortran90的新手,但尚未找到解决我遇到的问题的答案。
我有一个用Fortran编写的模块,模块中包含一些功能。

精简版:
vdiStringFunctions模块

vdiString接口
模块过程vdiString1Char
终端接口

包含
字符(128)函数vdiString1Char(CSTRING,sVar1)
字符(*),意图(in):: CSTRING,sVar1
字符(128):: vdiStringGeneral
字符(len = 128),尺寸(0:9):: stringArray

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

终端模块vdiStringFunctions


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


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


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

因为它应该在DLL中使用,所以所有功能都应该在模块内部。
我如何使它以这种方式工作?

最佳答案

在函数vdiStringGeneral中删除​​vdiString1Char的声明。
vdiStringGeneral的接口已经明确,因为它是在同一模块中定义的。
现在有了声明,链接器正在寻找外部函数。

09-11 19:53