我正在尝试使用rust为ios目标制作一个跨平台库。我正在跟随本文(在iOS上构建和部署Rust库)。*注意:我遵循了相同的步骤,我的项目结构看起来也是相同的*
完成代码和项目设置后,最后一步是构建库。当我尝试使用Cargo lipo--release
构建库时。它会抛出以下错误:
[ERROR cargo_lipo]找不到“my-project-name”
的库目标
另外,请注意,我只能安装对两个平台的支持。(aarch64-apple-ios
和x86_64-apple-darwin
)。我认为原因是他们放弃了对32位架构的支持。
因此,当我运行rustup target时,添加aarch64-apple-ios armv7-apple-ios armv7s-apple-ios x86_64-apple-ios i386-apple-ios
。
它抛出错误:错误:目标“armv7-apple-ios”的组件“rust-std”不可下载以实现通道稳定
cargo.toml
[package]
name = "rustylib"
version = "0.1.0"
edition = "2018"
crate-type = ["staticlib", "cdylib"]
rustylib.rs
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
char *hello(const char *to);
void hello_release(char *s);
项目结构的其余部分是通常的rust代码。
默认主机:x86_64-apple-darwin rustup主页:/users/my-username/.rustup
稳定-x86_64-Apple-Darwin
nightly-x86_64-apple-darwin(默认值)
AARCH64-Apple-IOS
x86_64-Apple-Darwin
nightly-x86_64-apple-darwin(默认值)
rustc 1.52.0-夜间(acca81892 2021-03-13)
生锈:生锈C 1.50.0(cb75ad5db 2021-02-10)
操作系统:macOS缺陷问题(11.2.3)
Xcode和命令行工具:12.4
你的货.Toml错了。
如果查看问题中链接的指南,您可以看到crate-type
必须位于[lib]
标记下面,如下所示:
[package]
name = "greetings"
version = "0.1.1"
authors = ["fluffyemily <fluffyemily@mozilla.com>"]
description = "Example static library project built for iOS"
publish = false
[lib]
name = "greetings"
crate-type = ["staticlib", "cdylib"]
此外,您的代码默认情况下必须在cargo/src/lib.rs
中(而不是rustylib.rs
)。
您可以从命令行运行cargo new rustylib--lib
来创建所有样板,这样您只需要在cargo.toml
的[lib]
部分中添加依赖项和crate-type
。
我认为还有一个问题:您在rustylib.rs
文件中输入了C代码,它不能工作。我认为您打算做的是创建C桥,在您链接的指南中称为cargo/src/greetings.h
。