问题描述
我正在尝试使用cxx crate为helios_dac生成防锈绑定。 DAC代码几乎只是一个头文件(HeliosDAC.h)和一个实现(HeliosDAC.cpp)。它也取决于libusb.h,但是到达它时我们会烧掉它。
这是我的建筑物脚本:
//build.h
fn main() {
cxx_build::bridge("src/lib.rs")
.cpp(true)
.file("src/HeliosDac.cpp")
.flag_if_supported("-std=c++14")
.flag_if_supported("-fPIC")
.compile("helios-bridge");
println!("cargo:rerun-if-changed=src/lib.rs");
println!("cargo:rerun-if-changed=src/HeliosDac.cpp");
println!("cargo:rerun-if-changed=src/HeliosDac.h");
}
这是我的桥接代码:
//lib.rs
#[cxx::bridge]
mod ffi {
extern "C" {
include!("helios/src/HeliosDac.h");
type HeliosDac;
// Functions implemented in C++.
fn HeliosDac() -> UniquePtr<HeliosDac>;
fn OpenDevices() -> i32;
fn CloseDevices() -> i32;
//fn WriteFrame(devNum: u32,pps: u32,flags: u8)
}
extern "Rust" {
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
assert_eq!(2 + 2,4);
let ndevs = ffi::OpenDevices();
println!("{}",ndevs);
}
}
代码的组织方式如下。
helios/
build.rs
src/
HeliosDac.cpp
HeliosDAC.h
libusb.h
lib.rs
当我运行cargo build
时,编译器会尽力帮助我,但我听不懂。对于我实现的每个“ C”函数,它都会发出有关该函数名称不在范围内的警告:
cargo:warning= int32_t (*CloseDevices$)() = CloseDevices;
cargo:warning= ^~~~~~~~~~~~
它甚至给了我一个建议:
note: suggested alternative: ‘CloseDevices$’
因此它可以看到一个函数名,但是最后还有一个&号? 有人可以向新手解释这里发生了什么吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)