问题标签 [bindgen]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Rust 调用 C,C 代码中的静态 const
我已经使用 rust-bindgen 来生成 rust 接口代码。
现在在 C 代码中,您可以找到以下内容:
请注意,在孔中其余代码_mps_key_ARGS_END
不会再次出现。
宏 MPS_KEY_ARGS_END 经常在其他 simular中使用mps_key_s
。
现在 rust-bindgen 生成的代码是这样的:
现在在 C 代码中,这是一个示例用法:
在 rust 中,它看起来像这样:
现在我试着这样称呼它:
但我得到一个错误:
错误:不匹配的类型:预期
*const Struct_mps_key_s
,找到Struct_mps_key_s
(预期 *-ptr,找到枚举 Struct_mps_key_s)
我不是一个优秀的 C 程序员,我什至不明白这些 C 静态甚至从哪里获得值。
谢谢你的帮助。
编辑:
根据 Chris Morgan 的回答进行更新。
我添加了这段代码(注意,我用 mps_key_t 替换了 *const mps_key_s):
只是关于我为什么mps_key_t
在 C 中使用 , 的一些额外信息:
生锈:
这个接缝接缝比以前更好,但现在我遇到了严重的崩溃:
错误:内部编译器错误:意外失败注意:编译器遇到了意外的失败路径。这是一个错误。注意:我们将不胜感激错误报告: http ://doc.rust-lang.org/complement-bugreport.html注意:运行
RUST_BACKTRACE=1
回溯任务“rustc”在“预期项目”失败,发现外部项目_mps_key_ARGS_END::_mps_key_ARGS_END (id=1102)', /home/rustbuild/src/rust-buildbot/slave/nightly-linux/build/src/libsyntax/ast_map/mod.rs:327
windows - 在 Windows 系统上使用 Bindgen 时如何找到 Oracle 的“oci.h”标头?
我尝试使用bindgen
自动生成 Rust FFI 绑定到 C 和 C++ 库,用于 Oracle 数据库的 OCI 绑定。
我遵循了bindgen
用户指南,我这样做了:
我的 Oracle 客户端 SDK 路径为E:/Rust/instantclient_11_2
,活动工具链为nightly-x86_64-pc-windows-msvc
文件wrapper.h
为:
当我运行时cargo build
,我收到以下错误:
如果我在 Ubuntu 16.04 上执行相同的操作,它会成功,但我不知道如何在 Windows 系统上执行此操作。
rust - Bindgen 跳过 C++ 头文件中的定义
我正在尝试为SEAL C++ library编译绑定。这是我的回购。
bindings.rs 没有来自defaultparams.h的任何内容
我必须向 Builder 对象添加什么才能在生成的绑定中包含defaultparams.h的函数?我需要coeff_modulus_128()
例如。
我尝试将其列入白名单,std::vector
但它对生成的绑定没有任何影响。
c++ - rust-bindgen 绑定引发 SIGSEGV
我使用rust-bindgen工具生成了与Microsoft SEAL C++ 库的绑定。
我的配置:
SEAL 项目是使用cc-rs使用以下配置编译的:
但之后,当使用静态方法创建一个新的上下文(这主要是 SEAL 特定的)时,我得到一个分段错误(SIGSEGV:无效引用),我在调试后发现gdb
它来自复制指向内存池的指针。
我能够实例化多个常规对象(没有静态构造函数的东西),但无论我尝试什么参数,它似乎都不适用于 SEALContext。
您可以在此处访问我的项目seal-rs。整个过程都在构建脚本中并克隆了 repo,因此cargo test
应该构建并重现错误。
我的操作系统是 Archlinux 64bit,使用的编译器是 clang 7。
rust - 如何将 Bindgen 生成的静态全局变量转换为全局常量?
Bindgen 从static const
C 风格的全局结构生成它:
我想安全地将它绑定到const
Rust 中的全局变量。
到目前为止我最好的尝试是
我收到以下编译错误:
我该怎么办?
c - 使用 bindgen 绑定基于 TPM 的服务的 tbs.h 时出现“未知类型名称”
我正在尝试tbs.h
通过 rust-bindgen 绑定(基于 TPM 的服务)。
我有以下标题:
该build.rs
文件包含 Windows SDK 包含目录的路径:
当我尝试通过创建绑定cargo build
并运行构建脚本时,出现以下错误:
是否缺少一些clang配置?
c - 如何使用 rust bindgen 为 postgresql 后端创建 Rust 绑定?
我制作了一个带有标准 lib.rs 的 Cargo 包,一个带有 under 的 Cargo.toml,一个带有bindgen = "0.59"
under[build-dependencies]
的 wrapper.h#include "rewrite/rewriteDefine.h"
和一个 build.rs,如下所示:
我在提交3779ac62d709467fe6331c8f0285d42e7487a01c和 clang 12.0.1、cargo 1.53.0(4369396ce 2021-04-27)和 rustc 1.53.02021 -06-17) 安装。
运行货物构建:
绝对路径:/home/manbearpig/Documents/postgresql/src/include
给出与相对路径相同的错误。
一些未知类型名称位于postgresql/src/include/c.h
. 我认为它们是使用来自postgresql/src/include/pg_config.h
.
在包含文件夹输出中运行bindgen c.h
,例如:pub type uint32 = ::std::os::raw::c_uint;
.
添加#include <stdbool.h>
到 wrapper.h 会替换../postgresql/src/include/storage/itemptr.h:203:8: error: unknown type name 'bool', err: true
为另一个错误。
rust - 如何只能通过 bindgen 生成 #[derive(Clone)]?
我正在使用 bindgen 生成具有以下配置的代码。
但是我发现生成的代码像
我想知道是否有任何方法我只能生成#[derive(Clone)]
而不生成[derive(Copy)]
?
rust - 如何避免在 bindgen 中使用生锈枚举的未定义行为?
bindgen有一个选项可以从 C 枚举生成 Rust 枚举(而不是常量)。但是,文档声明它能够生成在某些情况下调用未定义行为的代码:
请谨慎使用,在不安全的代码(包括 FFI)中使用无效值创建它会调用未定义的行为。您可能想改用 newtype 枚举样式。
为了避免这种情况,我究竟应该注意什么?“在不安全的代码中创建它”是否意味着build.rs
没有不安全代码的 a 会捕获这些情况?上面引用的意思我不清楚。
rust - 尝试通过 cargo fix 更新版本时未找到本地 crate
上下文:
我有一个名为“libmaths”的本地 C 库,然后使用 Bindgen 创建一个“libmaths-sys”包,该包在本地存储在与我的项目相同的目录中。
问题:
我想使用 2021 版 Rust 中的一些功能,目前我的项目是在 2018 年构建的。我正在尝试按照以下说明更新项目:
https://doc.rust-lang.org/cargo/commands/cargo-fix.html
运行 cargo fix --edition。如果您的项目具有多个功能,还可以考虑使用 --all-features 标志。如果您的项目具有由 cfg 属性控制的特定于平台的代码,您可能还希望使用不同的 --target 标志多次运行 cargo fix --edition。
修改 Cargo.toml 以将 edition 字段设置为新版本。
运行您的项目测试以验证一切仍然有效。如果发出新警告,您可能需要考虑再次运行 cargo fix(不带 --edition 标志)以应用编译器给出的任何建议。
要运行 cargo fix --edition,编译器告诉我删除 cargo toml 中的 edition="2018"。在此之后,我收到一个编译错误,指出找不到 libmaths-sys。代码在 2018 年编译和执行正常,但不是没有这个版本标签。
我找不到任何有类似问题的人,这是我的第一个 stackoverflow 问题,所以不确定如何最好地显示我的代码,因为它是一个小项目的上下文。
错误代码
文件结构和项目概述
libmaths包含返回a + b的add.c和返回a - b的subtract.c,头文件add.h指向两个.c文件
bindgen 生成的 Rust 代码通过 libmath-sys 板条箱中的 lib.rs 附加,该板条箱链接到我从树中省略的 OUT DIR 以保存 200 行文件名。