如何使Fortran程序与[REFERENCE]与gfortran兼容



我正在编译一段在 2000 年代初编写的旧 Fortran 代码。 在此代码库中,有一些函数旨在与 C 代码交互,并具有以下结构:

SUBROUTINE F_LIB_FOO(MY_VAR)
   !DEC$ ATTRIBUTES DLLEXPORT,STDCALL :: F_LIB_FOO
   REAL(8), INTENT(IN) :: MY_VAR [REFERENCE]
   LIB_FOO(MY_VAR) !This calls the function implemented internally

但是,当我尝试使用gfortran 4.4.7编译它时,出现以下错误

REAL(8), INTENT(IN) :: MY_VAR  [REFERENCE]
                             1
Error: Syntax error in data declaration at (1)

我认为REFERENCE表明MY_VAR是通过引用传递的。 但是,我找不到任何使用这种语法的示例。

根据这个答案,Visual Studios支持这种语法。我想知道在 Linux 机器中是否有类似的方法来执行此操作,如果没有,我如何更改代码以使用 gfortran 编译并具有相同的功能。

正如链接的答案所说,[REFERENCE]属性是一个非常非标准的东西,它改变了 STDCALL 调用约定的行为。Stdcall是Microsoft Win32 API和Open Watcom C++的标准调用约定。

您可以安全地删除Linux程序和64位Windows的它。

对于可能需要的情况(Win32(,GCC使用!GCC$ ATTRIBUTES STDCALL,但我不确定如何在那里指定REFERENCE

最新更新