具有可变结构和不变结构的调用

时间:2019-07-16 15:13:45

标签: julia

当返回类型具有可变结构以及具有不可变结构时,Julia如何处理ccall

这是一个简单的库,具有get_foos()函数,该函数返回一个结构,该结构具有另一个成员为double的结构。

typedef struct _Foo {
    double a;
} Foo;

typedef struct _Foos {
    Foo foo_a;
} Foos;

Foos get_foos() {
    Foos foos;
    foos.foo_a.a = 1 ;
    return foos;
}

下面的Julia代码按预期打印Foos(Foo(1.0))

using Libdl

struct Foo 
    a::Cdouble
end

struct Foos
    foo_a::Foo
end

function get_foos()
    sdk_dll = Libdl.dlopen("libfos") 
    f = Libdl.dlsym(sdk_dll, :get_foos)
    return ccall(f, Foos, ())
end

show(get_foos())

但是如果内部结构是可变的,我会遇到段错误。

mutable struct Foo 
    a::Cdouble
end

struct Foos
    foo_a::Foo
end

Julia 1.1,在Linux和OSX上。

我假设这不是一个错误,但是找不到足够的信息来找出原因。

0 个答案:

没有答案