windows - Rust Bindgen:在 Windows 上设置包含路径
问题描述
我是 Windows 下 Rust 开发的新手。
我正在尝试在windows和libk4a
linux 上绑定一个库.libk4a
/usr/local/include/k4a/k4a.h
/usr/local/lib/libk4a.so
我已经按照 bindgen 书的例子做了一个wrapper.h
to pass to build.rs
,这很简单:
#include <k4a/k4a.h>
这在 linux 下工作正常,build.rs
设置为
println!("cargo:rustc-link-lib=k4a");
在 Windows 上,dll 位于下方C:\Program Files\Azure Kinect SDK v1.3.0\sdk\windows-desktop\amd64\release\bin\
,标题位于C:\Program Files\Azure Kinect SDK v1.3.0\sdk\include\k4a\k4a.h
虽然我可以自己运行 bindgen
bindgen wrapper.h -- -I "C:\Program Files\Azure Kinect SDK v1.3.0\sdk\include"
如果它尝试在我的 build.rs 中添加包含路径,如前面的答案所示:
let bindings = bindgen::Builder::default()
.header("wrapper.h")
.clang_arg("-I \"C:\\Program Files\\Azure Kinect SDK v1.3.0\\sdk\\include\"")
.parse_callbacks(Box::new(bindgen::CargoCallbacks))
.generate()
.expect("Unable to generate bindings");
我仍然收到错误说它找不到头文件:
wrapper.h:1:10: fatal error: 'k4a/k4a.h' file not found
wrapper.h:1:10: fatal error: 'k4a/k4a.h' file not found, err: true
thread 'main' panicked at 'Unable to generate bindings: ()', build.rs:11:20
我是否缺少向包含路径添加内容的地方?应该k4a/k4a.h
在我的路上吗?还是我的配置中有错字?我不确定为什么它bindgen
在命令行上与 raw 一起使用,但不是build.rs
.
解决方案
这个问题有一个简单的答案。
我添加了额外的 clang 参数
.clang_arg("-v")
查看 clang 获得的包含路径,我注意到它显示了
" C:\Program Files\Azure Kinect SDK v1.3.0\sdk\include\"
基本上在包含路径之前有一个空格。删除它使其工作。
推荐阅读
- google-apps-script - 短时间内服务调用次数过多:exec qps。- 谷歌表格
- sql-server - 将数据保存到 MS SQL Server 时 MS Access 冻结(有时)
- pluralize - 数量大于1时变复数
- java - 在jsp中查找未关闭的标签
- python - 将 ipython html 对象保存为 pdf
- amazon-polly - 带有 Amazon Polly 的 SSML 标签的情感 TTS
- cmd - 如何测试与 RabbitMQ 服务器的连接?
- python - 如何逐个单元格写入单行单元格并将其填充到csv文件中
- azure - Azure AD B2C - 交易时验证用户
- retrofit - Android Retrofit 2.0:对 HTTP 调用没有响应