lib.exe:使用重复的公共块控制符号包含

问题描述 投票:0回答:1

我正在使用lib.exe从Fortran编译对象(使用Intel编译器18的早期F77)创建一个库。Fortran具有重复的不同大小的通用块。它也有重复的方法。这是旧代码,带有一些笨重的重载。

对于重复方法,lib.exe似乎总是从第一个对象获取该方法。

对于重复的公共块,它取自common.lib中的最后一个对象

lib.exe /OUT:target.lib pmk.objlib.exe target.lib common.lib

公共块仅在数组大小上有所不同,例如

COMMON / CPSTKC / ISTACK(6,200)

vs

COMMON / CPSTKC / ISTACK(6,15)

而且我需要更大的一个。

我不能只是颠倒lib.exe的顺序,因为它采用了错误的方法。另外,如果可以帮助,我也不想接触common.lib,但是pmk.f是公平的游戏。

我如何理解这里发生的事情,以便让它表现出来?

fortran lib
1个回答
0
投票

由于我的身份,我无法发表评论,但是由于没有其他人加入,所以这里是我的想法。您的程序中是否有BLOCKDATA单元(用于初始化Commons)?如果没有,您可以在主程序末尾添加它,或单独创建。这可以指定阵列的存储形状/大小。由于它们不是可执行文件,因此无法从库中进行链接,因此它们需要位于链接步骤中明确链接的内容中,这可能使其最容易放在主模块中。您将获得显式的优势,并且可以在任何可执行语句之前进行公共数据初始化(错误的常见来源)。

BTW,您提到的重复方法听起来很有风险,并且取决于编译器/链接器/版本。 (由于我认为至少在F77 stds中指定了别名,所以通用别名要少一些),为什么在相同的代码库中两次使用相同的方法?

© www.soinside.com 2019 - 2024. All rights reserved.