如何将Rust应用程序从macOS x86交叉编译到macOS Silicon?

如何将Rust应用程序从macOS x86交叉编译到macOS Silicon?,macos,rust,cross-compiling,apple-silicon,Macos,Rust,Cross Compiling,Apple Silicon,我想把一个Rust程序从我的x86Mac交叉编译成一个可以在Silicon Mac上运行的二进制程序,但我不知道如何链接 我有: 运行macOS 10.15.7 Catalina的x86 Mac cargo 1.51.0(43b129a20 2021-03-16)最近使用 Xcode版本12.4(12D4e) 我想把它编译成一个可以在硅(ARM)Mac上运行的二进制文件。这可能是: 特定于硅的二元结构 可以在硅或x86上运行的通用二进制文件 我有(通过/release.sh--dry)

我想把一个Rust程序从我的x86Mac交叉编译成一个可以在Silicon Mac上运行的二进制程序,但我不知道如何链接

我有:

  • 运行macOS 10.15.7 Catalina的x86 Mac
  • cargo 1.51.0(43b129a20 2021-03-16)
    最近使用
  • Xcode版本12.4(12D4e)
我想把它编译成一个可以在硅(ARM)Mac上运行的二进制文件。这可能是:

  • 特定于硅的二元结构
  • 可以在硅或x86上运行的通用二进制文件
我有(通过
/release.sh--dry

  • rustup目标添加aarch64苹果达尔文
  • cargo build--release--target=aarch64苹果达尔文
结果太长,无法粘贴到此处,因此这是一个摘录:

编译riff v0.1.0(/Users/johan/src/riff)
错误:与“cc”链接失败:退出代码:1
|
=注:“cc”“-arch arm64”“-L”“/Users/johan/.rustup/toolschains/stable-x86_64-apple-darwin/lib/rustlib/aarch64-apple-darwin/lib”“/Users/johan/src/riff/target/aarch64-apple-darwin/release/deps/riff.1g47gi93dk96t2va.rcgu.o”。。。“/Users/johan/src/riff/target/aarch64苹果达尔文/release/deps/riff.thread_local-9baf7723f72eef37.thread_local.7fl1y1d9 cgu.9.rcgu.o.rcgu.o”“/Users/johan/src/riff/target/aarch64苹果达尔文/release/deps/riff/riff.unwind-082f7f4ff792426f.unwind.7rkx2ya0.rcgu.o.o-o/Users/johan/src/rif苹果达尔文/release/riff/darwin”“-Wl,-dead_strip”“-nodefaultlibs”“-L”“/Users/johan/src/riff/target/aarch64苹果达尔文/release/deps”“-L”“/Users/johan/src/riff/target/release/deps”“-L”“/Users/johan/.rustup/toolschains/stable-x86_64苹果达尔文/lib/rustlib/aarch64苹果达尔文/lib”/Users/johan/.rustup/toolschains/stable-x86_64-apple-darwin/lib/rustlib/aarch64-apple-darwin/lib/lib/libcompiler_builtins-9eb7dc999785b765.rlib”“-lSystem”“-lresolv”“-lc”“-lm”
=注意:ld:警告:忽略文件/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/libresolv.tbd,文件/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/libresolv.tbd中缺少必需的体系结构arm64
ld:警告:忽略文件/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/libm.tbd,文件/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/libm.tbd中缺少必需的体系结构arm64
ld:警告:忽略文件/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/libc.tbd,文件/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/libc.tbd中缺少必需的体系结构arm64
ld:警告:忽略文件/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/libSystem.tbd,文件/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/libSystem.tbd中缺少必需的体系结构arm64
架构arm64的未定义符号:
“_tlv_atexit”,引用自:
std::sys::unix::thread_local_dtor::register_dtor::h4ece0fa32a190720在riff.std-e40bd6a3af835df4.std.5bd9rdky-cgu.0.rcgu.o.rcgu.o中
...
“免费”,引用自:
alloc::raw_vec::finish_grow::hd210c40bc8674cab(.llvm.18296587876935678160)在riff.addr2line-220464f1af330a49.addr2line.6xizm3st cgu.1.rcgu.o.rcgu.o中
addr2line::path_push::hf1048f2514c3ed28在riff.addr2line-220464f1af330a49.addr2line.6xizm3st cgu.5.rcgu.o.rcgu.o中
alloc::raw_vec::finish_grow::ha5f485527a5c6598在riff.addr2line-a950b2eed913eb15.addr2line.1hygsg7c cgu.0.rcgu.o.rcgu.o中
addr2line::path_push::riff.addr2line-a950b2eed913eb15.addr2line.1hygsg7c cgu.0.rcgu.o.rcgu.o中的h891160d400ff153e
core::ptr::drop_in_place$LT$aho_corasick..预滤器..打包$GT$::h03bcd2abfab8068d在riff.aho_corasick-5d6c900557669556.aho_corasick.4z4l4vb2 cgu.0.rcgu.o.rcgu.o
core::ptr::drop_in_place$LT$aho_corasick..打包..图案..图案$GT$::h0c7fda104debb352在riff.aho_corasick-5d6c900557669556.aho_corasick.4z4l4vb2 cgu.0.rcgu.o.rcgu.o中
core::ptr::drop_in_place$LT$alloc..vec..vec$LT$LT$alloc..vec..vec$LT$u8$GT$$GT$$GT$$GT$::h75f2b558c0581f8d在riff.aho_corasick-5d6c900557669556.aho_corasick.4z4vb2 cgu.0.rcgu.o.rcgu.o中
...
(也许你的意思是:alloc::alloc::box_free::ha8718384ecb60252(.llvm.10945926475227631812),alloc::alloc::box_free::h58e664059c03effd(.llvm.10945926475227631812),alloc::box_free::h75cae1a8684a32ce(.llvm.8938487907768303252),alloc::alloc::alloc::box_free::H0459F8E1BCC50A(.llvm.89387907763252),alloc::boxĂ::B9;::B9;(.llvm.78824082355892284297)、alloc::alloc::box-free::h75cae1a8684a32ce(.llvm.78824082235892284297)、alloc::alloc::box-free::h0459f8e1bcc5ae0a(.llvm.11547294393004044273)、alloc::alloc::box-free::hcc8806ce168336a8(.llvm.253716772799228199)、alloc::alloc::alloc::box-free::h305ed20d3d39c7(.llvm.75277012834),alloc::alloc::box-free::H384E6B725CAD166(.llvm.7882408235892284297),alloc::alloc::box-free::h0459f8e1bcc5ae0a(.llvm.788240823589284297),alloc::alloc::box-free::hb8cf920d803cfa22(.llvm.499261340806278909),alloc::alloc::box-free::h90dd1ed16b644fc1(.llvm.95622039413337BA),alloc::box-free::H907BA(.llvm.4992613404806278909),alloc::alloc::box_free::h75cae1a8684a32ce(.llvm.11547294393004044273))
ld:未找到架构arm64的符号
叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用)

添加适当的目标

rustup目标添加aarch64苹果达尔文
使用macOS 11.x SDK 1编译代码:

SDKROOT=$(xcrun-sdkmacosx11.1——显示sdk路径)\
MACOSX_部署_目标=$(xcrun-sdk macosx11.1--显示sdk平台版本)\
货物建造——目标=aarch64苹果达尔文
这将生成一个单拱