Ошибка: невозможно загрузить скомпилированную библиотеку gfortran в R («имя символа отсутствует в таблице загрузки») - PullRequest
0 голосов
/ 25 мая 2018

Ну, я недавно влюбился в Fortran (f90) и пытался понять "кунг-фу" из R и Fortran.Я нашел несколько уместных и полезных вопросов здесь (например, это и это ).

Что я пытаюсь сделать:

Я (возможно, пытаюсь сделать что-то сумасшедшее) пытаюсь вызвать следующие .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

Я компилирую вышеуказанный код test.f90 с помощью gfortran на моем компьютере с Windows 10:

gfortran -shared -o test.dll test.f90

Компиляция работает иЯ получаю test.dll.Сейчас в R.Я пытаюсь загрузить его:

 dyn.load("path_to_file/test.dll")

Работает.Но, это терпит неудачу здесь:

> is.loaded("test")
[1] False

Я уже нашел соответствующий вопрос здесь .Но я не мог получить ключ к решению моей проблемы.Может кто-нибудь предложить какой-нибудь обходной путь, чтобы решить проблему?

1 Ответ

0 голосов
/ 25 мая 2018

Я не большой пользователь R, но мои тесты показывают, что хотя

is.loaded("test_R")

действительно возвращает FALSE, оба

is.loaded("sr1")

и

is.loaded("sr2")

возврат TRUE.Но я провел свои тесты на Linux и GCC, которые могут по-разному интерпретировать видимые имена подпрограмм.

...