我正在编译一段在 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
。