Rust FFI 编程 - Rust 语言层面对 FFI 的支持

Rust 语言对 FFI 有比较完善的支持。本节主要讲在基础设施层面,Rust 语言对 FFI 的支持。

Rust 语言主要在关键字和标准库两个方面对 FFI 提供了支持,具体如下:

  • 关键字 extern

    • 属性 #[no_mangle]

    • 外部块 ExternBlock 及其属性 link 和 link_name

  • 标准库

    • std:os:raw 模块

    • std:ffi 模块

1. 关键字 extern

在 Rust 语言中,使用关键字extern可以实现 Rust 语言与其它语言的交互,这是 Rust 外部函数接口 FFI 的基础。

1.1 extern 函数

直接在 Rust 的函数关键字fn前使用关键字extern,可以创建一个允许其他语言调用 Rust 函数的接口。

同时可以通过使用 ABI 字符串[1]来指定具体的 ABI,其中有三个 ABI 字符串是跨平台的:

  • extern "Rust",默认的 ABI,在 Rust 代码中对任何普通函数fn foo()声明时都将使用该 ABI。

  • extern "C",指定使用 C-ABI,类似extern fn foo(),无论 C 编译器支持哪种默认设置。

  • extern "system",通常类似extern "C",但在 Win32 平台上,它是"stdcall",或用于链接到 Windows API。

// ffi/c-call-rust/src/lib.rs

pub extern "C" fn call_from_rust() {
    println!("This is a Rust function for C!");
}

1.2 属性 #[no_mangle]

属性no_mangle

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值