我是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
的接口已经明确,因为它是在同一模块中定义的。
现在有了声明,链接器正在寻找外部函数。