我正在试着为OSX建立一个铁 rust 计划.它将是通用二进制(x86_64英特尔和ARM64 M1).

我已经通过使用xcodeBuild成功地将SDL构建为通用二进制文件.

libSDL2.dylib:   Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit x86_64 dynamically linked shared library, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|NO_REEXPORTED_DYLIBS>] [arm64]
libSDL2_image.a: Mach-O universal binary with 2 architectures: [arm64:current ar archive random library] [x86_64:current ar archive random library]
libSDL2_ttf.a:   Mach-O universal binary with 2 architectures: [arm64:current ar archive] [x86_64]

我还成功地使用目标三元组x86_64-Apple-Darwin为x86_64构建了rust程序.

我目前没有为aarch64-Apple-Darwin构建rust程序,因为clang认为我是为iOS构建的,也无法链接libSDL2.dylib和所有框架.

我的Cargo .toml看起来像:

[target.x86_64-apple-darwin]
ar = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar"
linker = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang"
rustflags = ["-L$WORKSPACE/target/libs", "-L$WORKSPACE/target/sdk/usr/lib", "-Clink-arg=--target=x86_64-apple-darwin", "-Clink-arg=-Wl,-F$WORKSPACE/target/sdk/System/Library/Frameworks,-F/System/Library/Frameworks,-framework,CoreAudio,-framework,CoreFoundation,-framework,CoreGraphics,-framework,ImageIO,-framework,CoreServices"]

[target.aarch64-apple-darwin]
ar = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar"
linker = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang"
rustflags = ["-L$WORKSPACE/target/libs", "-L$WORKSPACE/target/sdk/usr/lib", "-Clink-arg=--target=aarch64-apple-darwin", "-Clink-arg=-Wl,-F$WORKSPACE/target/sdk/System/Library/Frameworks,-F/System/Library/Frameworks,-framework,CoreAudio,-framework,CoreFoundation,-framework,CoreGraphics,-framework,ImageIO,-framework,CoreServices"]

在构建程序的rust部分之前,运行sed的构建脚本将$WORKSPACE转换为正确的路径.

我如何修复构建脚本,以便在通过lipo将其与x86_64构建相结合之前编译arm64构建?

编辑:

以下是错误消息:

 = note: ld: warning: building for iOS, but linking in dylib file (/Users/runner/work/catgirl-engine/catgirl-engine/target/libs/libSDL2.dylib) built for macOS
          ld: warning: building for iOS, but linking in .tbd file (/Users/runner/work/catgirl-engine/catgirl-engine/target/sdk/usr/lib/libiconv.tbd) built for macOS/Mac Catalyst
          ld: warning: building for iOS, but linking in .tbd file (/Users/runner/work/catgirl-engine/catgirl-engine/target/sdk/usr/lib/libm.tbd) built for macOS/Mac Catalyst
          ld: warning: building for iOS, but linking in .tbd file (/Users/runner/work/catgirl-engine/catgirl-engine/target/sdk/System/Library/Frameworks/CoreAudio.framework/CoreAudio.tbd) built for macOS/Mac Catalyst
          ld: warning: building for iOS, but linking in .tbd file (/Users/runner/work/catgirl-engine/catgirl-engine/target/sdk/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation.tbd) built for macOS/Mac Catalyst
          ld: warning: building for iOS, but linking in .tbd file (/Users/runner/work/catgirl-engine/catgirl-engine/target/sdk/usr/lib/libSystem.tbd) built for macOS/Mac Catalyst
          ld: warning: building for iOS, but linking in .tbd file (/Users/runner/work/catgirl-engine/catgirl-engine/target/sdk/usr/lib/libc.tbd) built for macOS/Mac Catalyst
          ld: warning: building for iOS, but linking in .tbd file (/Users/runner/work/catgirl-engine/catgirl-engine/target/sdk/System/Library/Frameworks/ImageIO.framework/ImageIO.tbd) built for macOS/Mac Catalyst
          ld: warning: building for iOS, but linking in .tbd file (/Users/runner/work/catgirl-engine/catgirl-engine/target/sdk/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics.tbd) built for macOS/Mac Catalyst
          ld: warning: building for iOS, but linking in .tbd file (/Users/runner/work/catgirl-engine/catgirl-engine/target/sdk/System/Library/Frameworks/CoreServices.framework/CoreServices.tbd) built for macOS/Mac Catalyst
          ld: building for iOS, but linking in object file built for macOS, file '/Users/runner/work/catgirl-engine/catgirl-engine/target/aarch64-apple-darwin/release/deps/catgirl_engine-c308cec5d59a8390.catgirl_engine.065dccbf-cgu.7.rcgu.o' for architecture arm64

推荐答案

darwin is an ambiguous target.
Clang seems to treat x86_64-apple-darwin as a synonym for x86_64-apple-macos, but aarch64-apple-darwin as a synonym for aarch64-apple-ios (presumably because that was the first AArch64 Darwin target to exist).

只要用aarch64-apple-macos就行了.

Rust相关问答推荐

在‘await’点上使用‘std::同步::Mutex’是否总是会导致僵局?

Rust kill std::processs::child

将大小为零的类型实例存储到空指针中

如何在Rust中表示仅具有特定大小的数组

为什么std repeat trait绑定在impl块和关联函数之间?

你是如何在铁 rust 一侧的金牛座获得应用程序版本的?

闭包不会发送,即使它只捕获发送变量

如何高效地将 struct 向量中的字段收集到单独的数组中

一种随机局部搜索算法的基准(分数)

字段类型为Boxed的 struct 的生存期必须超过static

为什么Rust不支持带关联常量的特征对象?

如果变量本身不是None,如何返回;如果没有,则返回None&Quot;?

什么时候使用FuturesOrdered?

从字节数组转换为字节元组和字节数组时,为什么 Transmute 会对字节重新排序?

如何使用 Bincode 在 Rust 中序列化 Enum,同时保留 Enum 判别式而不是索引?

将多维数组转换为切片

判断 is_ok 后重用结果

如何获取包裹在 Arc<> 和 RwLock<> 中的 Rust HashMap<> 的长度?

BigUint 二进制补码

`if let` 只是另一种编写其他 `if` 语句的方式吗?