不同的程序结果取决于程序的链接方式

Different program result depending on how program is linked

我正在开发一个大型数值模拟程序,主要用 Fortran 编写,使用 Intel Fortran 编译器 (v18.0.3) 编译。

最近遇到一个神秘的问题:如果我link将外部库作为绝对路径的程序,与link编辑的程序相比,数值结果略有不同-L/path/to/lib -lnameOfLib

我检查了以下内容:

我无法检查为什么会发生这种情况。如果有人可以进一步建议如何处理这个问题以及可能产生差异的地方,我将很高兴。

我将根据 this explanation 得出以下结论。当 link 与 /usr/lib/libm.so 连接时,将使用平台 libm.so。当 linking 与 -lm 时,英特尔编译器会将 linking 命令也更改为 link 英特尔数学库 libimf.so。显然,这些不同的实现会产生导致差异的数值舍入误差。