gpt4 book ai didi

c - 使用 bindgen 绑定(bind)基于 TPM 的服务的 tbs.h 时出现 "unknown type name"

转载 作者:行者123 更新时间:2023-12-03 11:48:05 25 4
gpt4 key购买 nike

我正在尝试绑定(bind) tbs.h (基于 TPM 的服务)通过 rust-bindgen。
我有以下标题:

#ifndef TPM_WRAPPER_H
#define TPM_WRAPPER_H
#include <tbs.h>
#endif
build.rs文件包含 Windows SDK 的包含目录的路径:
use std::env;
use std::path::PathBuf;

fn main() {
println!("cargo:rustc-link-lib=tbs");
println!("cargo:rerun-if-changed=include/tpm_wrapper.h");

let bindings = bindgen::Builder::default()
.header("include/tpm_wrapper.h")
.clang_arg("-IC:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/shared")
.clang_arg("-v")
.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("tpm_bindings.rs"))
.expect("Couldn't write bindings!");
}

当我尝试通过 cargo build 创建绑定(bind)时并运行构建脚本,我收到以下错误:
C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/shared\tbs.h:50:9: error: unknown type name 'UINT8'
C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/shared\tbs.h:99:5: error: unknown type name '_In_'
C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/shared\tbs.h:99:31: error: expected ')'
C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/shared\tbs.h:98:20: note: to match this '('
是否缺少一些clang配置?

最佳答案

产生的错误是 windows-gnu toolchain 的一部分.切换到 stable-x86_64-pc-windows-msvc成功了。

rustup toolchain add stable-x86_64-pc-windows-msvc
rustup default stable-x86_64-pc-windows-msvc
stable-x86_64-pc-windows-msvc需要可从 Visual Studio 安装程序获得的 Windows 构建工具,甚至是独立的。
更新 tbs.h显然需要 windows.h对于所有窗口定义的类型。
由于 bug在 bindgen 中,有一个解决方法将某些 functions 列入黑名单

关于c - 使用 bindgen 绑定(bind)基于 TPM 的服务的 tbs.h 时出现 "unknown type name",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63131336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com