Open monkeycc opened 11 months ago
今天我在bindgen elk时遇到了类似的错误,碰巧就找到了这里. 至于elk那边的报错已经通过简单的将<>引入头文件改成了""引入头文件解决了,然后就想看看你这里是不是同样的原因所致. 摸索一番以后发现比我那里的报错多多了,不过最终还是成功cargo build出来了. 跟随README中的指引,成功执行了
./target/debug/infer.exe --model yolov8s.onnx --image 000000014439.jpg --device 0
你可以试着把wrapper.h里面的
#include <fastdeploy_capi/vision.h>
修改为
#include "fastdeploy_capi/vision.h"
此时应该会遇到新的错误,比如头文件找不到之类的.
我就遇到了stdio.h和stdint.h找不到的问题. 非常奇怪的是上面提到的elk项目就完全没有这个问题,于是我拙劣地手动指向这两个头文件的位置
let bindings = bindgen::Builder::default()
.header("wrapper.h")
.clang_arg(format!("-I{}", r"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include")) // stdint.h.
.clang_arg(format!("-I{}", r"C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt"))// stdio.h.
.parse_callbacks(Box::new(bindgen::CargoCallbacks))
.generate()
.expect("Unable to generate bindings");
这是我当前的build.rs内容
use std::env;
use std::path::PathBuf;
extern crate cc;
fn main() {
println!("cargo:rustc-link-search=native=fastdeploy_capi");
println!("cargo:rerun-if-changed=wrapper.h");
let bindings = bindgen::Builder::default()
.header("wrapper.h")
.clang_arg(format!("-I{}", r"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include")) // stdint not fount
.clang_arg(format!("-I{}", r"C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt"))// stdio.h not found.
.parse_callbacks(Box::new(bindgen::CargoCallbacks))
.generate()
.expect("Unable to generate bindings");
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
bindings
.write_to_file(out_path.join("bindings.rs"))
.expect("Couldn't write bindings!");
}
这个是我的Cargo.toml内容,除此之外没有修改其他文件内容.
[package]
name = "elk-rs"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
libc = "0.2"
[build-dependencies]
cc = "1.0"
bindgen = "0.66.1"
我yolov8文件夹下的内容长这样
.
├── 000000014439.jpg
├── Cargo.lock
├── Cargo.toml
├── README.md
├── README_CN.md
├── build.rs
├── core_tokenizers.dll
├── fastdeploy.dll
├── fastdeploy_capi
│ ├── core
│ ├── internal
│ ├── runtime
│ ├── vision
│ └── vision.h
├── icudt70.dll
├── icuuc70.dll
├── lib
│ ├── fastdeploy.dll
│ └── fastdeploy.lib
├── libhwloc-5.dll
├── libiomp5md.dll
├── mkldnn.dll
├── mklml.dll
├── onnxruntime.dll
├── onnxruntime_providers_shared.dll
├── opencv_ffmpeg3416_64.dll
├── opencv_world3416.dll
├── openvino.dll
├── openvino_auto_batch_plugin.dll
├── openvino_auto_plugin.dll
├── openvino_c.dll
├── openvino_gapi_preproc.dll
├── openvino_hetero_plugin.dll
├── openvino_intel_cpu_plugin.dll
├── openvino_intel_gpu_plugin.dll
├── openvino_ir_frontend.dll
├── openvino_onnx_frontend.dll
├── openvino_paddle_frontend.dll
├── openvino_tensorflow_fe.dll
├── paddle2onnx.dll
├── paddle_inference.dll
├── plugins.xml
├── src
│ └── main.rs
├── target
│ ├── CACHEDIR.TAG
│ └── debug
├── tbb.dll
├── tbb_preview.dll
├── tbbbind.dll
├── tbbmalloc.dll
├── vis_result_yolov8.jpg
├── wrapper.h
├── yaml-cpp.dll
└── yolov8s.onnx
多出来的这些dll是我下载文档中的C++ SDK后得到的fastdeploy_init.bat自动复制出来的.
系统: Windows 11 LLVM: LLVM.LLVM 16.0.6 winget cargo: 1.71.0 (cfd3bbd8f 2023-06-08)
https://github.com/PaddlePaddle/FastDeploy/tree/develop/examples/application/rust/yolov8
系统 win11
llvm MSYS2 已安装
建议弄win版教程 或者win msvc教程
https://crates.io/ 建议crates也弄一个
fastdeploy-win-x64-gpu-0.0.0 fastdeploy_capi 放根目录了
build.rs
wrapper.h
@wanziyu