首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rust Bindgen:在windows上设置包含路径

Rust Bindgen:在windows上设置包含路径
EN

Stack Overflow用户
提问于 2020-01-27 09:28:04
回答 1查看 803关注 0票数 0

我是Windows下的Rust开发新手。

我正在尝试绑定一个库libk4a,它在windows和linux.On linux上都是作为libk4a安装的,通常安装在/usr/local/include/k4a/k4a.h/usr/local/lib/libk4a.so下。

我遵循了bindgen书的例子,并制作了一个传递给build.rswrapper.h,它很简单:

代码语言:javascript
复制
#include <k4a/k4a.h>

这在linux上运行良好,build.rs设置为

代码语言:javascript
复制
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

代码语言:javascript
复制
bindgen wrapper.h -- -I "C:\Program Files\Azure Kinect SDK v1.3.0\sdk\include"

如果它试图将包含路径作为this previous answer suggests添加到我的build.rs中

代码语言:javascript
复制
   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");

我仍然收到错误消息,说找不到头文件:

代码语言:javascript
复制
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

我是否遗漏了向include路径添加内容的位置?k4a/k4a.h应该在我的路径上吗?还是我的配置中有拼写错误?我不知道为什么它可以在命令行上使用原始的bindgen,而不是build.rs

EN

回答 1

Stack Overflow用户

发布于 2020-01-28 06:45:08

这个问题的答案很简单。

我添加了额外的clang参数

代码语言:javascript
复制
.clang_arg("-v")

来查看clang获得的包含路径,我注意到它显示了

代码语言:javascript
复制
" C:\Program Files\Azure Kinect SDK v1.3.0\sdk\include\"

基本上,在include路径之前有一个空格。移除它可以让它正常工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59924315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档