好吧,我最近爱上了Fortran
(f90
)并且一直试图了解R
和Fortran
的“功夫”。我在这里找到了一些相关且有用的问题(例如this和this)。
我要做的是:
我(尝试做一些疯狂的尝试)尝试使用.f90
函数在R
(x64)中调用以下.Fortran()
子例程。这是test.f90
代码:
! Computes the square of a number
Subroutine sr1(a,b)
!DEC$ ATTRIBUTES DLLEXPORT::sr1
!DEC$ ATTRIBUTES C, REFERENCE, ALIAS:'sr1' :: sr1
implicit none
integer a,b
b = a*a
End Subroutine sr1
! Computes the cube of a number
Subroutine sr2(x,y)
!DEC$ ATTRIBUTES DLLEXPORT::sr2
!DEC$ ATTRIBUTES C, REFERENCE, ALIAS:'sr2' :: sr2
implicit none
integer x,y
y = x*x*x
End Subroutine sr2
我正在我的Windows 10计算机上通过test.f90
编译上述gfortran
代码:
gfortran -shared -o test.dll test.f90
编译工作正常,我得到了test.dll
。现在,在R
。我尝试加载它:
dyn.load("path_to_file/test.dll")
有效。但是,它在这里失败了:
> is.loaded("test")
[1] False
我已经找到了相关问题here。但是,我无法找到解决问题的线索。有人可以建议一些解决方法来解决这个问题吗?
答案 0 :(得分:1)
我不是R的大用户,但我的测试表明,而
is.loaded("test_R")
确实会返回FALSE
,两者都是
is.loaded("sr1")
和
is.loaded("sr2")
返回TRUE
。但是我在Linux和GCC上进行了测试,这可能会以不同的方式解释外部可见的子程序名称。