浅谈 Rust bindgen 工具

rust bindgen 工具用于帮助 rust 开发者调用现成的 C 代码。如果不使用 rust bindgen 工具,rust 开发者为调用现成的 C 代码需要做以下工作:

  1. 看准要使用的那些 C 函数,观察其参数和返回值的数据类型
  2. 在 Rust 代码中定义相应的 Rust 类型,使其符合对应 C 类型的内存布局,可能需要使用 #repr(C) 这样的属性。
  3. 在 Rust 代码中定义相应的 Rust 函数声明(在 extern "C" 块中完成),这告诉编译器:这个函数是一个外部实现的函数,而且对他的调用要符合 C ABI
  4. 编译器会为这种只有声明的函数生成重定位条目,等待链接器为相应的 call 指令填入正确的地址。

其中前三条是需要 Rust 开发者手工完成的。如果只针对一两个特定的 C 函数进行上述工作,工作量是可以接受的。如果引入一个完整的 C 库,那么对 C 库中每一个数据结构和函数声明都进行上述工作,工作量就很大了。这时就需要 bindgen 工具帮忙。

bindgen 会解析 C 库中的头文件(利用 LLVM 项目的 clang 前端),认识其中的数据类型和函数定义,并自动生成 Rust 绑定------即带 #repr(C) 属性的 rust 结构体和 extern "C" 块中的 rust 函数声明。之后 rust 编译器就能根据这些 rust 绑定生成正确的对 C 库的调用代码

相关推荐
Interview Aid1128 小时前
TikTok OA 四题分享|半小时内 AC,题目基本都是实现题
java·开发语言·算法·面试·职场和发展
CoderIsArt15 小时前
C#中UI 线程与 Dispatcher
开发语言·ui·c#
AI情绪识别开源18 小时前
检信 ALLEMOTION OS 加密打包可执行程序 — 全面测试报告版本: v1.3功能测试 / 性能测试 /
开发语言·数据结构·人工智能·功能测试
「QT(C++)开发工程师」19 小时前
C++ auto 用法详解
开发语言·c++
OPEN-F19 小时前
C++STL教程:容器适配器与实用工具
开发语言·c++
yaoxin52112319 小时前
507. Java 反射 - 在 BeanFactory 中实现依赖注入
java·开发语言
OPEN-F19 小时前
C++模板教程:变参模板、折叠表达式与SFINAE
java·开发语言·c++
有点。19 小时前
C++二叉搜索树进阶
开发语言·c++
HugoStudio_SWAN19 小时前
【擦除重绘】C++ 控制台动画:弹跳 Logo DVD 屏保效果
开发语言·c++·学习·程序人生