I haven't done this often but when I did I looked at how it is done in the lapack and blas interfaces. There are several examples
https://github.com/JuliaLang/julia/blob/master/base/linalg/blas.jl https://github.com/JuliaLang/julia/blob/master/base/linalg/lapack.jl Paulo On Monday, June 6, 2016 at 9:16:27 PM UTC-3, Charles Ll wrote: > > Dear all, > > Thank you very much for you help! I've been able to write a form of gcvspl > that seems to run, with calling: > > ccall( (:gcvspl_, "./libgcvspl.so"), Void, > (Ptr{Float64},Ptr{Float64},Ptr{Cint},Ptr{Float64},Ptr{Float64},Ptr{Cint},Ptr{Cint},Ptr{Cint},Ptr{Cint},Ptr{Float64},Ptr{Float64},Ptr{Cint},Ptr{Float64},Ptr{Cint}),x,y,&NN,wx,wy,&M,&N,&K,&MD,VAL,c,&NC,WK,IER) > > > However, when I try to call the c or IER variables, the Julia kernel > dies... :s > > Do you have any idea why? What am I missing? > > Furthermore, dear Erik, what do you mean by using 'Ref' for one-element > arrays? > > Thanks in advance! > > Best, > Charles. > > Le lundi 6 juin 2016 22:12:32 UTC+10, Erik Schnetter a écrit : >> >> I would use `Cint` as type, not `Int64`, as in `Ptr{Cint}`. Are you sure >> that your Fortran code uses 64-bit integers? Technically, this violates the >> Fortran standard. A Fortran integer is the same as a C int, except if you >> use special flags while building the Fortran library (which you might be >> doing). >> >> You can use `Ref` instead of one-element arrays. >> >> Your error message has nothing to do with arrays vs. pointer, but rather >> the mismatch between `Float64` and `Int64`. >> >> -erik >> >> >> On Mon, Jun 6, 2016 at 6:07 AM, Páll Haraldsson <[email protected]> >> wrote: >> >>> On Monday, June 6, 2016 at 3:22:47 AM UTC, Charles Ll wrote: >>>> >>>> Dear all, >>>> >>>> I am trying to call some Fortran code in Julia, but I have a hard time >>>> doing so... I have read the docs, looked at the wrapping of ARPACK and >>>> other libraries... But I did not find any way to make it work. >>>> >>>> I am trying to wrap a spline function library (gcvspl.f, >>>> https://github.com/charlesll/Spectra.jl/tree/master/Dependencies), >>>> which I want to use in my project, Spectra.jl. >>>> >>>> I already have a wrapper in Python, but this was easier to wrap with >>>> using f2py. In Julia, I understand that I have to do it properly. The >>>> function I am trying to call is: >>>> >>> >>> I think, you may already have gotten the correct answer. At first I was >>> expecting fcall, not just ccall keyword in Julia, to call Fortran.. It's >>> not strictly needed, but in fact, there is an issue somewhere still open >>> about fcall (keyword, or was if for a function?), and it may have been for >>> your situation.. >>> >>> >>> [It might not be too helpful to know, you can call Python with >>> PyCall.jl, so if you've already wrapped in Python..] >>> >>> -- >>> Palli. >>> >>> >>> >> >> >> -- >> Erik Schnetter <[email protected]> >> http://www.perimeterinstitute.ca/personal/eschnetter/ >> >
