错误:无法在R中加载gfortran编译的DLL(“符号名称不在加载表中”)

时间:2018-05-25 11:45:34

标签: r windows dll fortran

好吧,我最近爱上了Fortranf90)并且一直试图了解RFortran的“功夫”。我在这里找到了一些相关且有用的问题(例如thisthis)。

我要做的是:

我(尝试做一些疯狂的尝试)尝试使用.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。但是,我无法找到解决问题的线索。有人可以建议一些解决方法来解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

我不是R的大用户,但我的测试表明,而

is.loaded("test_R")

确实会返回FALSE,两者都是

is.loaded("sr1")

is.loaded("sr2")

返回TRUE。但是我在Linux和GCC上进行了测试,这可能会以不同的方式解释外部可见的子程序名称。