Rust FFI指南(http://static.rust-lang.org/doc/master/guide-ffi.html)很好地演示了如何导入使用Rust std::lib
库包装的标准C类型的C函数,例如size_t
.但如何将第三方库中定义的C数据 struct 引入到Rust程序中呢?
我正在使用libmemcached,它有以下功能:
memcached_st* memcached_create(memcached_st *ptr)
通常在C程序中这样调用(以启动程序):
#include <libmemcached/memcached.h>
// ...
memcached_st *memc;
memc = memcached_create(NULL);
memcached_st
是一个不透明的C struct ——我如何在Rust程序中声明和使用它?以下是我迄今为止失败的try :
use std::libc::*;
use ptr;
#[link(name = "memcached")]
extern {
struct memcached_st; // error: unexpected token: `struct`
memcached_st* memcached_create(memcached_st *ptr);
}
fn main() {
unsafe {
let memc = memcached_create(ptr:null());
println!("{:?}", memc);
}
}
和
use std::libc::*;
use ptr;
#[link(name = "memcached")]
extern {
// error: unexpected token: `memcached_st`
memcached_st* memcached_create(memcached_st *ptr);
}
fn main() {
unsafe {
let memc = memcached_create(ptr:null());
println!("{:?}", memc);
}
}