9个版本
0.2.1 | 2024年1月7日 |
---|---|
0.2.0 | 2023年2月7日 |
0.1.0-beta.2 | 2022年12月24日 |
0.1.0-beta.1 | 2022年8月28日 |
0.0.1 | 2021年11月22日 |
#40 in macOS和iOS API
每月下载量 183,688
47KB
459 行
block-sys
此crate已弃用。请使用 block2::ffi
代替。
对Apple C语言块扩展的原始Rust绑定。
此crate是objc2
项目的一部分,有关相关crate的信息请参阅该项目。
运行时支持
此库是对明确指定的Blocks ABI的原始接口。然而,存在不同的运行时实现,它们以略有不同的方式(并具有多个不同的辅助函数)操作,最重要的方面是库的命名不同,因此链接必须考虑这一点。
您可以通过使用相关的cargo功能标志来选择所需的运行时,参见以下章节(您可能需要先禁用默认的 apple
功能)。注意,如果 objc-sys
crate存在于模块树中,则应启用与该crate相同的特征标志。
Apple的 libclosure
- 功能标志:
apple
。
这是最复杂的运行时,它比规范所要求的具有更多的功能。默认情况下使用。
最低所需的操作系统版本如下
- macOS:
10.6
- iOS:
3.2
- tvOS: 未知
- watchOS: 未知
尽管实际上Rust本身需要更高版本的操作系统。
LLVM compiler-rt
的 libBlocksRuntime
- 功能标志:
compiler-rt
。
这是苹果公司较旧的(大约是 macOS 10.6)运行时的副本,现在也用于 Swift 的 libdispatch
和 Foundation。
运行时和相关头文件可以使用 libblocksruntime-dev
包安装到许多 Linux 系统上。
使用此运行时可能无法与 objc-sys
砖一起工作。
GNUStep 的 libobjc2
- 功能标志:
gnustep-1-7
,gnustep-1-8
,gnustep-1-9
,gnustep-2-0
和gnustep-2-1
,具体取决于您使用的版本。
GNUStep 有点奇怪,因为它将其块支持捆绑到其 Objective-C 运行时中。这意味着我们必须链接到 libobjc
,这是通过依赖于 objc-sys
砖来实现的。虽然有点不规范,但它是可行的。
源代码
微软的 WinObjC
- 功能标志:
unstable-winobjc
。
不稳定:尚未在 Windows 上测试!
基于 GNUStep 的 libobjc2
1.8 版本的 分支。
ObjFW
- 功能标志:
unstable-objfw
。
不稳定:尚未工作!
待办事项。
C 编译器配置
据我们所知,目前只有 clang
支持 块语言规范。为了帮助编译使用这些功能的 C(或 Objective-C)源代码,此砖的构建脚本将 DEP_BLOCK_0_2_CC_ARGS
环境变量暴露给下游构建脚本。
在您的 build.rs
中的示例用法(使用 cc
砖)如下所示
fn main() {
let mut builder = cc::Build::new();
builder.compiler("clang");
builder.file("my_script_using_blocks.c");
for flag in std::env::var("DEP_BLOCK_0_2_CC_ARGS").unwrap().split(' ') {
builder.flag(flag);
}
builder.compile("libmy_script_using_blocks.a");
}