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

Fortran lib.exe:使用重复的公共块控制符号包含,fortran,lib,Fortran,Lib,我正在使用lib.exe从Fortran编译对象(使用英特尔编译器18的古代F77)创建库。 Fortran具有不同大小的重复公共块。它也有重复的方法。 这是带有笨拙重载的遗留代码 对于重复的方法,lib.exe似乎总是从第一个对象获取该方法 对于重复的公共块,它从common.lib中的最后一个对象获取它 lib.exe/OUT:target.lib pmk.obj lib.exe target.lib common.lib 公共块仅在阵列大小方面不同,例如 普通/CPSTKC/ISTACK(

我正在使用lib.exe从Fortran编译对象(使用英特尔编译器18的古代F77)创建库。 Fortran具有不同大小的重复公共块。它也有重复的方法。 这是带有笨拙重载的遗留代码

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

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

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

公共块仅在阵列大小方面不同,例如

普通/CPSTKC/ISTACK(6200)

vs

普通/CPSTKC/ISTACK(6,15)

我需要大一点的

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


我怎样才能理解这里发生了什么,这样我才能让它表现出来呢?

由于我的身份,我不能发表评论,但由于没有其他人插话,我的想法如下。在这个程序中是否有块数据单元(这会初始化公用程序)?如果没有,您可以在主程序的末尾添加此项或单独创建。这可以指定阵列的存储形状/大小。由于它们不是可执行文件,因此无法从库中链接,因此它们需要在链接步骤中显式链接,这可能使其最容易放置在主模块中。您可以在任何可执行语句之前显式地初始化公共数据(常见的bug源)


顺便说一句,您提到的重复方法听起来非常危险,并且依赖于编译器/链接器/版本。(常见的别名不是这样,因为我认为它至少在F77 stds中指定过,如果不是以后的话)为什么在相同的代码库中使用相同的方法两次?

在风险方面无法达成更多一致。这是一个古老的遗留代码,我不愿意接触太多。