从Julia调用的fortran子例程返回数组

时间:2019-04-02 13:58:31

标签: fortran julia

我需要从Julia中调用此fortran子例程:

SUBROUTINE f90sub(N, a, b)
    integer, intent(in) :: N
    real(8), intent(in) :: a
    real(8), dimension(N) :: b
    integer :: i
    do i = 1, N
        b(i) = a**i  ! just an example
    end do
END SUBROUTINE f90sub

子例程包含在文件 f90lib.f90 中,该文件可通过以下文件进行编译:

gfortran -shared -fPIC f90lib.f90 -o f90lib.so

如果我尝试从Julia调用子例程,如下所示:

N = 4
a = 2.5 
b = zeros(Float64, N)
N_ref = Ref{Int}(N)
a_ref = Ref{Float64}(a)
b_ref = Ref{Array{Float64,1}}(b)
ccall( (:f90sub_, "./f90lib.so"), Cvoid, (Ref{Int},Ref{Float64},Ref{Array{Float64,1}}), N_ref, a_ref, b_ref)

访问b的值时出现段错误。正确的方法是什么?

(SO和其他地方有几个与此类似的问题/答案和示例,但它们似乎都已过时。我使用的是Julia v.1.1.0。Julia文档非常关注C,并且我对Fortran的部分不太清楚;我没有找到任何有用的Fortran示例。)

0 个答案:

没有答案