gfortran,DLL,根本没有任何意义(或正常工作)

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

我在Fortran中有以下简短的代码,我将其命名为myDLL.f90:

    Real(Kind=8) Function mySinCos(x,y)
        Real(Kind=8), Intent(In) :: x, y

        mySinCos = Sin(x)*Cos(y)
    End Function mySinCos

    Real(Kind=8) Function myPiSinCos(x,y)
        Real(Kind=8), Intent(In) :: x, y
        Real(Kind=8), Parameter :: Pi = 4.0d0*Datan(1.0d0)

        myPiSinCos = Sin(Pi*x)*Cos(Pi*y)
    End Function myPiSinCos

以及以下主程序TestDLL.f90:

    Program TestDLL

        Real(Kind=8) :: x, y
        Real(Kind=8) :: a, b

        x = 2.0d-01
        y = 9.0d-01

        a = mySinCos(x,y)       !Should be 0.12349483641187213
        b = myPiSinCos(x,y)     !Should be -0.5590169943749475

        Write(*,*) a
        Write(*,*) b

    End Program TestDLL

我编译了上述资源并与之链接:

gfortran -shared -fPIC -o myDLL.dll myDLL.f90

gfortran -o a.exe TestDLL.f90 -L。 myDLL.dll

无编译/链接错误,并且a.exe”运行时没有错误消息。它产生的是:

   6.0000000000000000
   6.0000000000000000

显然不是期望的结果,因为sin(...)* cos(...)绝不能大于0.5(或

简而言之:正确编译,良好链接,良好执行并产生垃圾。

更改x

y不会更改结果。他们总是6.0000 [...]。

出了什么问题?上面的示例与我在互联网上找到的其他简单示例并没有太大区别。

我正在使用GNU Fortran(MinGW.org GCC Build-20200227-1)9.2.0,Windows 10 64位。

我在Fortran中有以下短代码,我将其命名为myDLL.f90:Real(Kind = 8)函数mySinCos(x,y)Real(Kind = 8),Intent(In):: x,y mySinCos = Sin(x)* Cos(y)...

dll fortran gfortran
1个回答
0
投票

如果将两个功能转换为一个模块,效果很好:

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