У меня есть общая библиотека Fortran, указанная с помощью:
C FILE: OTHER.F
SUBROUTINE OTHER(FUN)
EXTERNAL FUN
INTEGER I
DO I=0,5
PRINT *, FUN(I)
ENDDO
END SUBROUTINE
C END OF FILE OTHER.F
Который я составил следующим образом: gfortran -shared -O2 other.f -o libother.so -fPIC
У меня сейчас другой модуль:
C FILE: CALLBACK.F
SUBROUTINE FOO(FUN,R)
EXTERNAL FUN
INTEGER I
REAL*8 R
R = 0D0
DO I=-5,5
PRINT *, FUN(I)
R = R + FUN(I)
ENDDO
CALL OTHER(FUN)
END SUBROUTINE
C END OF FILE CALLBACK.F
И я хочу скомпилировать этот модуль как модуль Python, используя f2py. Чтобы достичь этого, я ввел:
f2py -m callback -h callback.pyf callback.f
с последующим:
f2py -c callback.pyf callback.f -L. -lother
Затем я использую интерпретатор Python для запуска:
import callback
callback.foo(lambda x: 1)
Ожидаемое поведение:
foo
)other
внутри foo
)Наблюдаемое поведение вместо этого:
ImportError: libother.so: cannot open shared object file: No such file or directory
Если я сделаю nm callfun.so
, Я могу увидеть это other
не определено
Задача ещё не решена.
Других решений пока нет …