关于使用Julia包装C代码的调试提示
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
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
。你是对的。我试试看。非常感谢你。