尝试在Fortran中使用模块声明时链接错误

时间:2014-09-12 12:21:58

标签: fortran

我已阅读此问题:How do you USE Fortran 90 module data 但我无法解决我的问题。

当我尝试使用在另一个模块中声明的变量时,我收到错误LNK2019:未解析的外部符号。

有关背景信息:我是Fortran的初学者,正在参与其他人创建的项目。我正在使用英特尔Fortran作曲家和视觉工作室。我不确定我是否理解正确使用公共和私人模块数据。

问题是每当我尝试在另一个模块中使用变量BodySystem时,它都不起作用,我得到的错误是有一个未解析的外部符号。

我使用公共和私人部分是否不正确或我是否遗漏了其他内容?

编辑:我将代码更改为可编辑的代码段

Edit2:删除了代码,因为那不是问题。由于目标文件已经过时,IanH给了我正确的答案。

我得到的确切错误信息是:

错误2致命错误LNK1120:1个未解析的外部Debug \ HmSlam.exe
错误1错误LNK2019:函数_MAIN__ HmSlam.obj中引用了未解析的外部符号_COORDINATESSYSTEM_M_mp_BODYSYSTEM

其中HmSlam是主程序,coordinatessystem_m是声明变量bodysystem的模块。

1 个答案:

答案 0 :(得分:0)

链接器错误消息中缺失符号的“重整”告诉您编译器知道名称BODYSYSTEM来自模块COORDINATESSYSTEM_M,否则它不会我们已经能够以它的方式将模块名称和符号名称组合在一起(编译器将具有不同的名称修改约定)。

这告诉您问题可能不在于编译代码 - 在链接阶段出现问题。

我怀疑您向链接器提供了过时的目标文件,或者您根本没有提供相关的目标文件。

(我们在这里:

  • 使用类型绑定程序意味着这不是Fortran 90 - 它至少是Fortran 2003.欢迎来到21世纪。

  • 您的来源没有私人和公共“部分” - 您拥有的是私人和公开声明。 PRIVATE关键字本身在一个语句中表明该模块的默认可访问性是私有的 - 即默认情况下,模块中定义或声明的内容不会在模块为{{1 }}倒是。没有这样的私有语句,模块的默认值是公共的。然后,USE关键字后跟标识符列表,指定这些标识符是公共的(与私有默认设置相反)。私有语句和公共语句的一般定位和数量并不重要,只要它们在任何使用和隐式语句之后出现在模块的规范部分中。

  • 在USE语句的ONLY说明符中命名标识符不会“调用”任何内容,它只是说“此模块中只有此符号(以及说明符中列出的任何其他符号)”可用于以下范围“。