我正在编写一些代码来连接用C编写的现有库.在我的Rust代码中,我希望能够使用CPP宏中的值.如果我有一个C.h看起来像这样:
#define INIT_FLAG 0x00000001
我希望能像这样在Rust 的地方使用它:
#[link(name="mylib")]
extern {
pub static init_flag: c_int = INIT_FLAG;
}
我看过其他的 foreign 金融机构代码,我看到很多人
我正在编写一些代码来连接用C编写的现有库.在我的Rust代码中,我希望能够使用CPP宏中的值.如果我有一个C.h看起来像这样:
#define INIT_FLAG 0x00000001
我希望能像这样在Rust 的地方使用它:
#[link(name="mylib")]
extern {
pub static init_flag: c_int = INIT_FLAG;
}
我看过其他的 foreign 金融机构代码,我看到很多人
这是不可能的,我认为这在future 是不可能的.C宏带来了太多的问题.如果你想在 rust 源上运行cpp
次,你可以手动运行.
如果你不想这样做,如果有很多常量,你也不想把它们的值从C代码复制到Rust,你可以制作一个C包装器,它将提供带有这些值的全局变量:
#define INIT_FLAG 0x00000001
...
const int init_flag = INIT_FLAG;
编译此文件,从中创建静态库,并像往常一样链接到它:
$ gcc -c init_flag.c
$ ar r libinitflag.a init_flag.o
rust 源:
use std::libc;
#[link(name="initflag", kind="static")]
extern {
pub static init_flag: libc::c_int;
}
rust 源几乎与您试图实现的目标相同.不过,您需要C glue对象文件.