Is it possible to use a shared library using gfortran?

I would like to make such a file to use it in python. how can i make a shared library from fortran source?

I tested the code below.

gfortran -c mod.f90 #gfortran -c sub1.f90 gfortran -c func.f90 gfortran -shared -fPIC -o func.so func.f90 mod.o 

but I could not import it in python. I used the module file in the fortran source code. and I imported the fortran source code from python. I am not sure that I am right.

 [===>14:47:59]f1:python Python 2.7.2+ (default, Oct 4 2011, 20:03:08) [GCC 4.6.1] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import func Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: dynamic module does not define init function (initfunc) func.f90 ----------------------------------------- program func use mod_test switch1 = .true. switch2 = .false. x = 1.2 !call test(x, z) print *, b, str, z, switch1, switch2 !print *, 'hello' end program func ----------------------------------------- mod.f90 ----------------------------------------- module mod_test !implicit none integer a real x, y, z real*8 :: b = 3.4 logical*2 switch1, switch2 character*5, parameter :: str = 'good' end module mod_test ----------------------------------------- sub1.f90 ----------------------------------------- subroutine test(input, output) real, intent(in) :: input real, intent(out) :: output output = (input + input) end subroutine ----------------------------------------- 
+4
source share
1 answer

You need the glue between Fortran and Python. Check out F2PY - Fortrans for Python Interface Generator

EDIT. Example:

 f2py -c -m func func.f90 mod.f90 sub1.f90 python >>> import func >>> dir(func) ['__doc__', '__file__', '__name__', '__version__', 'mod_test', 'test'] 

EDIT 2. If you want to execute code in func.f90 from Python, I think you should change it from program to subroutine.

+9
source

Source: https://habr.com/ru/post/1396558/


All Articles