使用 gfortran 标志 default-real-8 和 stdlib 时编译失败

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

我正在尝试以 64 位编译我的程序。我使用 gfortran 和选项

default-real-8
来编译:

-fdefault-real-8    Set the default real type to an 8 byte wide type. 

我使用Fortran的stdlib

但出现错误:

build\dependencies\stdlib\src\stdlib_specialfunctions_gamma.f90:1175:18:

 1175 |             res = l_gamma(n + 1, 1.0D0)
      |                  1
Error: There is no specific function for the generic 'l_gamma' at (1)

如果我相信这个错误,则包含此调用的函数是

impure elemental function l_factorial_iint64(n) result(res)
    integer(int64), intent(in) :: n

    [...]
    
    res = l_gamma(n + 1, 1.0D0)
end function

所以

n
是 int(8) 且
1.0D0
是 real(8),我认为它应该找到这个重载:

impure elemental function l_gamma_iint64dp(z, x) result(res)
    integer(int64), intent(in) :: z
    real(dp), intent(in) :: x

    [...]

end function

但显然不是。对于 Fortran 和

kind
的东西来说还很陌生,我想我错过了一些东西!

fortran gfortran 32bit-64bit
1个回答
0
投票

1.0D0
将从
REAL(8)
提升为
REAL(16)
文档非常清晰

如果可能,此选项会将 DOUBLE PRECISION 和双实数常数(如 1.d0)的默认宽度提升为 16 个字节。

由于

l_gamma
real(16)
上没有重载,所以编译失败。

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