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

从Julia调用的fortran子例程返回数组,fortran,julia,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 子程序包含

我需要调用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的值时,我得到一个segfault。正确的方法是什么


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

Ref{Array{Float64,1}
看起来很奇怪,我想应该是
Ref{Float64}
?如果是这样的话,试着直接通过
b
。哦,是的,很有效!谢谢!