关于使用Julia包装C代码的调试提示

关于使用Julia包装C代码的调试提示,c,wrapper,julia,C,Wrapper,Julia,C结构: typedef struct { int32_t tid; int32_t pos; uint32_t bin:16, qual:8, l_qname:8; uint32_t flag:16, n_cigar:16; int32_t l_qseq; int32_t mtid; int32_t mpos; int32_t isize; } bam1_core_t; typedef struct { bam1_cor

C结构:

typedef struct {
    int32_t tid;
    int32_t pos;
    uint32_t bin:16, qual:8, l_qname:8;
    uint32_t flag:16, n_cigar:16;
    int32_t l_qseq;
    int32_t mtid;
    int32_t mpos;
    int32_t isize;
} bam1_core_t;

typedef struct {
    bam1_core_t core;
    int l_data, m_data;
    uint8_t *data;
    uint64_t id;
} bam1_t;
type BinQualLqname
    bin::UInt16
    qual::UInt8
    l_qname::UInt8
end

type FlagNCigar
    flag::UInt16
    n_cigar::UInt16
end

type Bam1_core_t
    tid::Int32
    pos::Int32
    bin_qual_lqname::BinQualLqname                                                                                 
    flag_ncigar::FlagNCigar                                                                                                 
    l_qseq::Int32
    mtid::Int32
    mpos::Int32
    isize::Int32
end

type Bam1_t
    core::Ptr{Bam1_core_t}
    l_data::Int32
    m_data::Int32
    data::Ptr{Cuchar}                                                                                 
    id::UInt64
end
我写入的Julia数据类型:

typedef struct {
    int32_t tid;
    int32_t pos;
    uint32_t bin:16, qual:8, l_qname:8;
    uint32_t flag:16, n_cigar:16;
    int32_t l_qseq;
    int32_t mtid;
    int32_t mpos;
    int32_t isize;
} bam1_core_t;

typedef struct {
    bam1_core_t core;
    int l_data, m_data;
    uint8_t *data;
    uint64_t id;
} bam1_t;
type BinQualLqname
    bin::UInt16
    qual::UInt8
    l_qname::UInt8
end

type FlagNCigar
    flag::UInt16
    n_cigar::UInt16
end

type Bam1_core_t
    tid::Int32
    pos::Int32
    bin_qual_lqname::BinQualLqname                                                                                 
    flag_ncigar::FlagNCigar                                                                                                 
    l_qseq::Int32
    mtid::Int32
    mpos::Int32
    isize::Int32
end

type Bam1_t
    core::Ptr{Bam1_core_t}
    l_data::Int32
    m_data::Int32
    data::Ptr{Cuchar}                                                                                 
    id::UInt64
end
当我在julia函数中使用上述数据类型时:

function sam_read1!(samfile,bamheader,b::Ptr{Bam1_t})
    record = ccall((:sam_read1,"libhts"),Cint, (Ptr{Void},Ptr{Void},Ptr{Bam1_t}),samfile,bamheader,b)                                                                                        
end
b中的数据由
sam_read1!修改是胡说八道。我如何调试这个?有推荐的工具或技巧吗?

sam\u read1

int sam_read1(tamFile fp, bam_header_t *header, bam1_t *b);  
在哪里

似乎和你的Bam1\u t不一样。会

type Bam1_t
    core::Bam1_core_t
    l_aux::Int32
    data_len::Int32
    m_data::Int32
    data::Ptr{Cuchar}
end
工作?

sam\u read1

int sam_read1(tamFile fp, bam_header_t *header, bam1_t *b);  
在哪里

似乎和你的Bam1\u t不一样。会

type Bam1_t
    core::Bam1_core_t
    l_aux::Int32
    data_len::Int32
    m_data::Int32
    data::Ptr{Cuchar}
end

工作?

在C结构中,为什么使用位字段而不是实际的8或16位类型?如果您担心填充,那么所有编译器都有扩展来删除它。C代码是由其他人编写的,我正在尝试为它编写Julia包装器。在C结构中,为什么要使用位字段而不是实际的8或16位类型?如果您担心填充,那么所有编译器都有扩展来删除它。C代码是由其他人编写的,我正在尝试为它编写一个Julia包装器。
Bam1\u t
中的
core
类型应该是
Bam\u core\u t
。你是对的。我试试看。非常感谢。在
Bam1\u t
core
的类型应该是
Bam\u core\u t
。你是对的。我试试看。非常感谢你。