つまり、
勉強してきました
The Cargo E-book 1、このページ に出くわすと、遅れてしまいます:
それは、あなたが望む重労働全体に同意するかもしれません。自由な製品のコンパイラ構成フラグを最適化し、ピクルします。 ./aim/liberate/ フォルダーにあるコンパイル済みのユーティリティ バイナリ。 ありえない
とはいえ、Rustについて少しだけ言えば、Rustはローステージのプログラミング言語であり、さまざまな場面で脆弱な場合もあります。プラットフォーム。 あなたが従事しているオペレーティング契約のバイナリを実際にコンパイルしていませんか? 他のオペレーティング システムでこのユーティリティを使用することを選択した場合はどうなりますか? そのバイナリをアセンブルすることにどの程度同意しますか?
先にスキップして解決策を探したい場合は、
私たちがそこでどのように受け取るかの取り決めを調べることを好む場合は、勉強を続けてください.
本当に簡単な解決策: 目的のマシンに組み立てるそれを利用するには
簡単な解決策の1つは、反対側に実際に組み立てることです楽器。 House Windows マシンでユーティリティを作成しましたが、Linux ノートブック コンピュータで計測器を使用する必要がありましたか? 轟音はありません。 反対側のインストゥルメントで rustup をセットアップし、git リポジトリをクローンしてからラグします貨物受け取り –liberate 上記の事実を賞賛します。
しかし、実際にはここに使命があるかもしれません。 楽器を組み立てるのに必要なアレンジメント ライブラリをセットアップする準備ができていない場合はどうすればよいでしょうか。 そのノートブック コンピューターが、rustup ファイルまたはコンパイル ファイル全体を格納するのに十分なストレージに同意しない場合はどうすればよいでしょうか? これを遅らせることを選択したマシンが、このバイナリを迅速にアセンブルしたい全体の処理エネルギーと一致しない場合はどうなりますか? たまたま壊れた家の窓 – 特定の図書館が賞賛する
マークしなかったOsStringExtは今まで反対の楽器では動かなかった?
あなたが同意することを選択したマシンのトレンドマシンにこのバイナリを組み立てることができたとき、それはおそらく貴重であると判断されました.それが展開された状態で (
“corrupt-compilation”)。 これにより、どのクレートと機能を使用するかを計画し、ヒント ユーザーが問題を自分でコンパイルする手間を省いて、試してみることができます。 このマシンで Rust ユーティリティを完全に多様なマシンにアセンブルするために、何に同意できますか? コンパイル対象のプラットフォーム
まさにここRust の「プラットフォーム」の概念が登場します。 プラットフォーム は、 Rustコンパイラがバイナリをコンパイルする際に対応したい3つの問題:
CPU アーキテクチャ (32 ビット、64 ビット、ARM、または他の 命令位置アーキテクチャ) 作業環境 (Linux、macOS、家の窓など) コンパイルツール ( GNU ツールチェーン, musl,
Microsoft Visible C++など) 簡単にするために、「動作が保証されている」と考えるのが難しい「Tier 1」プラットフォームである Linux、macOS、および House Windows に実際に注目することができます。
堕落させるRustクレート-組み立てる
簡単にするために、「動作が保証されている」と考えるのが難しい「Tier 1」プラットフォームである Linux、macOS、および House Windows に実際に注目することができます。
堕落させるRustクレート-組み立てる
いくつか同意する その他のユーティリティ を採用することにしました。 これらのユーティリティを Linux マシンで開発している場合は、レポをクローンして Linux 用にアセンブルします。
git clone https://github.com/jrhawley/misc_utils CD misc_utils cargo receive
–liberate[target.x86_64-pc-windows-gnu]
当面の間、プラットフォーム用のユーティリティをアセンブルする可能性があります. それにもかかわらず、私が使用している操作の取り決めに関係なく、これらのユーティリティが私が使用しているどのコンピューターでも動作することを好むかもしれません 2。 分解-組み立てるために、すべてのステップで同一の頻出概念を使用します。 さまざまなプラットフォーム用のユーティリティを分解して組み立て、rustup
ライブラリ全体をダウンロードして配置するには、これに同意することを好みます
3
:
--標的 { エイム・プラットフォーム・トリプル}
重要なことに、これは私たちのネイティブの受信に関する影響とは一致しません. これは、aim-platform-triple.
で指定されたレシーブ エイムに完全に影響します。
特定の破損したコンパイルに関する詳細な手順については、オペレーティング システムのすべてのペアに固有の指示が必要です。
Linux から Windows へ
いくつかの依存関係を設定します。 Debian フレーバーの Linux ディストリビューションの場合、これにより generous が使用されます。 その他のディストリビューションについては、機器管理者にご相談ください。
# MinGW GNU C ツールチェーンをセットアップします
須藤 寛大な
rustup aim add x86_64-private computer-windows-gnu cargo receive
--解放- 標的 x86_64-private computer-windows-gnu
それは ./aim/x86_64-private computer-windows-gnu/liberate/ フォルダー内のバイナリを解放します。
>
ファイルの目的/解放/mvlog aim/liberate/mvlog: ELF 64 ビット LSB パイ実行可能ファイル、x86-64、モデル 1 (SYSV)、動的にリンクされた、インタープリター /lib64/ld-linux-x86-64.so .2、ビルド ID =534b971da7aecc23dbb8e40a63ea56fad0bc2bf3, ために GNU/Linux 3.2.0、debug_info あり、削除されていない
# ハウス Windows 用に Linux でコンパイルされた元のファイル
> ファイルの目的/x86_64 - プライベート コンピューター-windows-gnu/liberate/mvlog.exe aim/x86_64-private computer-windows-gnu/liberate/mvlog.exe: PE32+実行ファイル (コンソール) x86-64, ために
MSハウスの窓
それでおしまい! 私たちは最初の成功した破損コンパイルを達成しました。 ここまで落ち着いたら、もう少しハードな編集に取り掛かります
LinuxからmacOSへ
ここでは、House ウィンドウで行ったのと同じトリックに見えますが、これは Apple Xcode SDK に起因する追加の手順と一致しています。 が必要ですOSXcross インストルメントを使用して、macOS ツールチェーンをセットアップします。 楽器は感心します
godot この方法論を購入したのでメモしておきます
まず、OSXcross の依存関係をセットアップします。 Ubuntu では、
須藤 優しい 設定 作る
cmake
ギット
パッチ
libclang-dev libssl-dev
liblzma-dev
libxml2-dev
さらに、他の Linux ディストリビューションについては、そのディストリビューションの機器管理者および専門家に相談してください。 同一のライブラリ。 次に、OSXcross リポジトリをダウンロードします。 2 GB を超えるストレージにアクセスできるドライブでは、これに同意する必要があります
ギットクローン https://github.com/tpoechtrager/osxcross
cd osxcross
次に、 macOS SDK のコンパイル済み tarball 4.
=
スランプ
=10.7 ./receive.sh # たまたま GCC を使用してアセンブルすることを選択した場合は、次の行もラグします# そうでない場合は、この手順をスキップしてください . /build_gcc.shこれは、すべてが成功した場合でも、分数を購入することもできます ss、あなたの端末は音のない検索をしなければなりません:パッチファイル usr/encompass/c++ /v1/__hash_table ハンク #1 は 1170 で成功しました (オフセット 6 トレース)。 ハンク #2 は 1239 で成功しました (オフセット 6 トレース)。 試行中 i386-apple-darwin14-clang++ -stdlib=libc++ -std=c++11 ... 試行中 x86_64-apple-darwin14-clang++ -stdlib=libc++ -std=c++11 ... を作成している作品は i386-apple-darwin14-clang を試みています ... を作成している作品は i386-apple-darwin14-clang++ を試みています ... を作成している作品は x86_64h-apple-darwin14-clang を試みています .. . を作成している作品 x86_64h-apple-darwin14-clang++ ... を作成している作品 x86_64-apple-darwin14-clang を作成している作品 ... を作成している作品 x86_64-apple-darwin14-clang++ を試みている作品 ... 作品/home/james/Paperwork/osxcross/aim/bin を PATH 変数に追加する努力を怠らないようにしてください。 すべて完了! これで、o32-clang(++) と o64-clang(++) を使用する準備が整いました。 インスタンスの使用法: インスタンス 1: CC=o32-clang ./configure --host=i386-apple-darwin14 インスタンス 2: CC=i386-apple-darwin14-clang ./configure --host=i386-apple-darwin14 インスタンス 3: o64-clang -Wall を見てください.c -o インスタンス 4 を見てください: x86_64-apple-darwin14-strip -x を見てください)最後のステップは、上記のフォルダーを
$PATH
ar
5 。 私の場合、そのフォルダーは
/home/james/Paperwork/osxcross/aim/bin
. 貨物の構成の変更移動するとすぐに misc_utils チェックリストでは、コンパイル前に 1 つの終了ステップを優先します。 OSXcross のツールについて カーゴ とどなりたいと思います。 以下を .cargo/config.toml に保存することで、これに同意します:
# これは、x86_64-apple-darwin プラットフォームを目指した後に指定します# オブジェクトを効果的にリンクするにはこれらのツールが必要です [target.x86_64-apple-darwin] リンカ =
"x86_64-apple-darwin14-clang"
="x86_64-apple-darwin14-ar" macOS への不正なコンパイルへの影響これで 貨物
が効果的に構成されたので、期待どおりに進めることができます.
rustup 狙い追加 x86_64- apple-darwin cargo receive --liberate - 標的 x86_64-apple-darwin今、完全に機能する macOS bi に同意します。
>file aim/x86_64-apple-darwin/liberate/mvlog aim/x86_64-apple-darwin/liberate/mvlog: Mach-O 64 ビット x86_64 実行可能ファイル、フラグ:
macOS から Linux へ
このジョブは、Linux から Linux への上記の macOS ジョブですが、Xcode を回避することはもう好まないため、少し効率的です。
活用 ホム ebrew, 必要な付属ライブラリをセットアップできます.
醸造タップ SergioBenitez/osxct brew セットアップ x86_64-unknown-linux-gnu
このコンパイラとリンカを利用するようにカーゴを設定します
上記が大好きです。.cargo/config を構成する必要があります。 次のファイルを追加して Linux にコンパイルする場合 3:
[target.x86_64-unknown-linux-musl]リンカ=
"x86_64 -unknown-linux-gnu-gcc"
Linuxへの不正なコンパイルへの影響以下からファイルを検索するので、残りは事実です:
>
rustup 目的追加 x86_64-unknown-linux -musl >
貨物受け取り –解放する
--狙い x86_64-unknown-linux-musl > ファイル aim/x86_64-unknown-linux-musl/liberate/mvlog aim/x86_64-unknown-linux- musl/liberate/mvlog: ELF 64 ビット LSB 実行可能ファイル、x86-64、モデル 1 (SYSV )、静的にリンク、debug_info あり、ストリップされていない macOSからハウスウィンドウへあなたは今では無言でそのイメージに同意しているはずです。 最初に依存関係を設定します:
次に、 を編集します。 .cargo/config.toml:
家の窓から…まさにここがリズムから台無しになる場所行きましょう。 家の窓では、Rust は
Microsoft Visible C++ コンパイラ 。LLVM とは異なり、プロプライエタリです。 Linux と macOS で利用してきた GNU コンパイラ。 これにより、MSVC を活用して他のプラットフォームにアセンブルするのは… 要求が厳しい.
あなたが できる この作業を受け取ります。 それにもかかわらず、Linux または macOS の C ライブラリをセットアップして組み立てる必要があり、それらすべてを中央の機器マネージャーを欠いたオペレーティング アレンジメントで効果的にリンクする必要があります。注意点は何ですか? そうそう、 厳しい.
これにより、購入できる主な方向が 2 つ残ります。 . これらの各指示では、Linux の回避策を採用しています:
- エクササイズ MSYS2/Cygwin
必要な Linux 固有のライブラリをセットアップするには、または
を鍛える Linux 用のハウス ウィンドウズ サブシステム (WSL) と、Linux マシンを使用しているという事実の偽物
Linux に完全にアセンブルする必要がある場合は、どちらを選択してもかまいません。 それにもかかわらず、たまたま macOS にアセンブルする必要がある場合は、OSXcross と同じトリックで検索を購入できます。これは、House ウィンドウまたは MSYS2/Cygwin
6。 中止の結果、WSL を使用する場合を除き、House windows から macOS にアセンブルする準備ができなくなります
(または準備ができていないまでではない). 以下では、これらのアプローチの長所と短所について詳しく説明します。 それにもかかわらず、最初に、破損したコンパイルに同意する準備ができていることのチェックリストを作成します. …WSLを利用したLinuxへ
これは意外と簡単です。 WSL をインストールします
ドキュメントに従って、Linuxを起動しますそして、たまたま Linux マシンを使っていたときと同じように進めてください。
rustup 再び、恐ろしい重複です。 それにもかかわらず、これによりネイティブ コンパイルが可能になります。 おそらく事実上のラグ
cargo receive --liberate
が必要かもしれませんが、 は必要ありません。 — aim x86_64-unknown-linux-musl 肯定するのは、それがすでにデフォルトであるためです.…MSYS2を利用したLinuxへ
私のスキルでは、MSYS2 をセットアップして使用する最も簡単な方法は を使用することです。 スクープ
:mingw-w64-x86_64-toolchain
良いまた、する必要があります LLVMのダウンロードとセットアップ、目立たない
7
。 $PATH 環境変数に LLVM を提供するフィールドを調べることを保証します。
次に ./.cargo/config.toml
に置き換えます。 このオリジナルプラットフォーム 3 )
:
[target.x86_64-unknown-linux-musl] リンカ=“/course/to/LLVM/bin/lld.exe”
PRできるようになりました
rustup aim add x86_64-unknown-linux-musl cargo receive --liberate - 標的 x86_64-unknown-linux-musl
…WSLを利用したmacOSへ
事実を指摘できるので、ここで特定のことに同意する必要はありません 上記の Linux から macOS への手順. …ハウス Windows ユーティリティへ WSLの化
WSL は完全に本格的な Linux オペレーティング アレンジメントであるため、実際にそれを使用して、House windows への動機付けを分解および組み立てることができます。 これに同意しなければならない事実上の動機はありますか? ほぼ確実にそうではありませんが、私たちはすでにここにいるので、リラックスして調査してクロステストしてみませんか. 手順メモ 上記の事実を賞賛する
驚くべきことに、これらは実際にはわずかに異なるさまざまなファイルです。すべてのシステムで GNU ツールチェーンを使用したとしても、さまざまなファイルがあります.
すべてのバイナリの hexdumps をたまたま検索する場合は、2 つの間の特定のバイトのいくつかのマイナーなバリエーションを調べる準備ができていることになります。
>ヘキシル -n 160 ./aim/liberate/mvlog.exe ┌────────┬──── ──────────────────────┬──────────────────────────┬── ──────┬────────┐ │00000000│ 4d 5a 90 00 03 00 00 00 ┊ 04 00 00 00 ff ff 00 00 │MZ×0•000┊•000××00│ │ 00000010│ b8 00 00 00 00 00 00 00 ┊ 40 00 00 00 00 00 00 00 │×0000000┊@000 0000 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000000000000000000000000000000000000000000000000000000000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000000 00 0000 0000×000│ │00000040│ 0e 1f ba 0e 00 b4 09 cd
┊ 21 b8 01 4c CD 21 54 68 │••ו0×_×┊!וL×!Th│ │00000050│ 69 73 20 70 72 6f 67 72 ┊ 61 6d 20 63 61 6e 6e 6f │is program┊am canno│ │00000060│ 74 20 62 65 20 72 75 6e┊ 5t 20 69 4 be 69 4e 20 │4e 20ラグ┊ in
DOS │ │00000070│ 6d 6f 64 65 2e 0d 0d 0a ┊ 24 00 00 00 00 00 00 00 │mode.___┊$0000000│ │00000080│ 50 45 00 00 64 86 14 00 ┊ 57 5b f4 63 00 2a 6a 00 │PE00dו0┊W[×c0 * j0│ # 👈 この行を調べる… │00000090│ 52 58 00 00 f0 00 26 00 ┊ 0b 02 02 26 00 e6 21 00 │RX00×0&0┊•••&0×!0│ └────────┴── ────────────────────────┴──────────────────────────┴ ────────┴────────┘ > ヘキシル -n 160 ./aim/x86_64-private computer-windows-gnu/liberate/mvlog.exe ┌ ────────┬──────────────────────────┬──────────────── ──────────┬────────┬────────┐ │00000000│ 4d 5a 90 00 03 00 00 00 ┊ 04 00 00 00 ff ff 00 00 │ MZ×0•000┊•000××00│ │00000010│ b8 00 00 00 00 00 00 00 ┊ 40 00 00 00 00 00 00 00 │×0000000┊@0000000 │ │000000200 │ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000,000000┊0000000000│00000030│00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000,000000000000┊0000×00010000000000000000 09 cd
┊ 21 b8 01 4c CD 21 54 68 │••ו0×_×┊!וL×!Th │ │00000050│ 69 73 20 70 72 6f 67 72 ┊ 61 6d 20 63 61 6e 6e 6f │プログラムはできません│ │00000060│ 74 20 62 65 20 72 75 6e ┊ 20 69 │ 4 2 4 6eラグ┊ in
DOS │ │00000070│ 6d 6f 64 65 2e 0d 0d 0a ┊ 24 00 00 00 00 00 00 00 │mode.___┊$0000000 │ │00000080│ 50 45 00 00 64 86 17 00 ┊ f0 ed f3 63 00 84 67 00 │PE00dו0┊×××c0×g0│ # 👈 …この行で │00000090│ 29 58 00 00 f0 00 26 00 ┊ 0b 02 02 28 00 e8 21 00 │)X00×0&0┊•••(0 ×!0│ └────────┴──────────────────────────┴────────── ────────────────┴──── ────┴────────┘
私は、 コンパイラの私よりも多くのスキルは、ここで正確に何が起こっているのか、これらの2つのバイナリが変動する手順を怒らせることができます. 私たちはと主張するだけで十分ですできる このマトリョーシカに同意します必要に応じて、人形のような腐敗したコンパイルを行います.
ありません’しかし、部屋の象について言及しました。 コンテナ は、数年間使用されていたスキルであり、10 年以内に楽器を変更することはほとんどありません。 コンテナーを使用すると、ビルダーは自分のマシンでさまざまなオペレーティング システムを使用し、ホスト ファイルの配置を使用して正確でわずかなシステムに取り組むことができます。 これは、破損したコンパイルを達成するために使用するのに理想的に適切なスキルである可能性があります いつになったら、それを受け取る準備ができているでしょう。 これは、私が上記で使用した WSL と精神的に非常に同じです。 では、なぜ今までコンテナーについて言及しなかったのでしょうか?
単純な理由は、コンテナが非常に重要だとは思っていないからです。 丸型容器(例: Docker
, Podman など) は重く光る傾向があります。 Docker は、それを利用するために動作するデーモン ジョブを必要としています。 集中化されたオンライン リポジトリから巨大なキャラクタライズ ファイルをプルして、キャラクタライズを受け取りたい。 一部のマニフェスト ファイルで正確な依存関係を指定することは、まったく面白くありません。 ホスト配置で集中するために特定のボリュームをマウントすると、一貫してどのボリューム
/
が参照されているかについて困惑します。 一部の HTTP/TCP リクエストの動機にプロセスが隠されている場合、トレンド全体のプロセスをデバッグすることは困難です。 チェックリストは続きます。 私は、これらのシステムのニュアンスをつかむのに十分な経験を積んだシステム管理者ではありません。 また、テクノロジーを利用することで得られる報酬を享受できるピクルスにいるわけでもありません。全体として、ほとんどの場合、コンテナを操作することは、わざわざオリジナルのアレンジメント ライブラリをセットアップし、構成ファイルを改善することよりも難しく感じます。 とはいえ、何かが好きではないからといって、それについて勉強したり集中したりしない言い訳にはなりません。 ということで、コンテナに注目してみましょう
壊れたコンパイルのために効率的に脆弱なコンテナを使用することに多くの人が同意します。
cargo-zigbuild は、これらの破損したコンパイル要素の多くを解決するために現代的な方法論を採用しています(gawk 例)。 を採用しています Zig コンパイラ zcc リンクに同意するため、は依存関係のないトップルイン C/C++ コンパイラであり、破損したコンパイルを自動的にサポートします。 それはエレガントに輝いており、私はここでの創意工夫に感心します. 残念ながら、この計測器は macOS にネイティブにアセンブルしません。 macOS に焦点を当てるには Docker の特性が必要ですが、それに同意できるかどうかはあなた次第ではありません。
です。 不道徳。 不道徳は何年も前から存在しており、事実に関する文書があり、一時的に試してみたところ、確実に機能します. Dockerの画像がありますほぼすべてのRustエイムプラットフォームで、簡単に始められます.
もちろん、インモラルにはいくつかの欠点があります。 ユーティリティにそれらを使用することを選択した場合、Docker 特性の配置ライブラリに配置する要素があります
OpenSSL。 これらの懸念に対処することは、あなたが不道徳を利用していなかったとき、ホスト契約に同意するさまざまな作業を重複させますが、今ではコンテナのベールの動機でそれを行っています. そこにはmacOS で動作が壊れている既知の要素がいくつかあります。 Docker/Podman 内で破損を操作し、Docker ホストについてそれを確認するために破損を構成することで、これらの要素を回避できる可能性があります。 そして最も重要なことは、個人的には、
x86_64-apple-darwin
にコンパイルするためのキャラクタライズがありません 8。 そのため、よく設計された完全なソリューションを使用して Immoral を賞賛したとしても、サウンドレスはあなたが望むものに同意する準備ができていない可能性があります.OSXcross に配置することで macOS 用にこれらのコンテナー画像を拡張し、そこから同じツールを使用して macOS にアセンブルできるようにしようとしています。 本当に、それはまさに何のように見えますこの GitHub アクション は、Ubuntu キャラクタライズと musl C で行います。コンテナのベールの動機でそれを行っているため、より重要になります。 そして、この GitHub Action が私の次のテーマへと導いてくれます
GitHub Actions macOS およびその他の運用規約に同意する Docker 画像コンパイルに使用する準備が整います。 これは、あなた自身がこの種のマシンへの物理的な受信エントリに同意しない場合に、これらのシステムを簡単に受信できるようにする必要があります。 それがという方法論です。 信念がかかります。 おそらくほぼ間違いなく、この種のサービスを利用してそれらを受信することを選択したプラットフォーム全体の YAML 構成を特定することもできます.
ここでの主な欠点は、適切な統合と適切な展開 (CI/CD) を開発することが非常に不安になることです。 CI/CD を最初に有効に機能させるには、受信パイプラインをトリガーする受信マニフェストをコミットします。数分後に完全に失敗します。 次に、マニフェストの元のソリューションで検索を購入し、受信をオフにして、完全に元の手順で失敗することを間違いなく望んでいます。 この作業を何度も繰り返すと、リポジトリには数十の受信アーティファクトが散らばり、実際にはプログラムにとって何の意味もない更新されたモデル番号が散らばり、全体が混乱します.
私のスキルでは、これらの受信システムの範囲は賢明に拡張されますが、それでも非常に壊れやすく、修理するのは面白くありません。 趣味としてプログラミングするのが好きな一人として、私はこれに時間をかけたり粘り強くしたりすることに同意しません 9 )。 したがって、概念的には、これらのサービスを破損コンパイルに使用する準備ができていると考えられますが、実際には、上記の手順全体よりも苦痛になる可能性があることに同意します.
多様なアプローチのまとめ
これで、これらの多様なシステム間で堕落と組み立てを行う手順がわかったので、それらを調べて、それぞれの事実と邪悪な点を調べてみましょう.
Linuxは配信です。 Linux を使用してすべてを組み立てることができ、すべてを Linux に組み立てることができます。
家の窓が閉じて光っています。 MSVC ツールチェーンをハウス ウィンドウに使用することはできず、他のシステムからハウス ウィンドウを組み立てる準備ができたら、いくつかの追加作業で確認する必要があります。
macOS は、ハウス ウィンドウよりもはるかに閉鎖的です。 これまでのところ、House Windows マシンで macOS にアセンブルする準備ができていません。WSL の回避策で戦いたいと思っています。 それでも、OSXcross を受け取り、macOS SDK をハックして、すべてが効果的に機能するようにすることを無音で好むでしょう
この場所のビルダーバインドで。 Linux のオープン性により、Linux へのコンパイルが比較的容易になりますが、欠点も残されています。 多くの反対のオペレーティング システムの 1 つに deprave-assembly することを選択した場合は、多くの反対のオペレーティング システムの 1 つを使用することで、より簡単に生きていくことができます。 1) macOS 用の Rust でインストゥルメントを作成し、2) 自分の存在を簡単にすることを選択した場合、最も効率的な方法は macOS で作成することです。 同じことが家の窓にも当てはまります。 それにもかかわらず、これらのオペレーティングシステムの動機の企業は、この仕事を意図的に難しくしたことに同意します 10
. 互換性のないツールチェーンにより、この仕事は、本来あるべき、または望んでいる以上に重要なものになっています。 インモラル・コンパイルとは、実際には、さまざまな企業やオペレーティング・システムが構築する壁に囲まれた庭を調査することから始まります。
たまたま、開発を開始するためのオペレーティング システムを取得しようとしている場合、私が提供する最も効果的なアドバイスは、このユーティリティを最も頻繁に使用するマシンにアセンブルすることです。 これはネイティブ コンパイルであり、より簡単に制御でき、コンパイラとコードの間の抽象化レイヤーのトラブルシューティングを行う必要はありません。 その後、私の次の推奨事項は、純粋に基本的に完全に使いやすさに基づいていますが、家の窓かもしれません. アドバンテージを取ることで WSL の ge を使用すると、同じマシンですべてのネイティブ House ウィンドウとネイティブ Linux コンパイルを受け取る準備が整いますが、soundless は 3 つすべてを試す準備ができています。 それは、反対のオペレーティング システムのどちらも提供していないことの 1 つです。 macOS は、反対側の 2 つのシステムにライブラリをセットアップする最も簡単な方法です。 家の窓では、非常に多くのツールチェーンを選択できます。 Linux は配布元であり、私たち全員が対処しなければならない独自の頭痛の種にはなりませんでした.
コンテナーまたは CI/CD サービスに精通していれば、これらを使用して必要な結果を得る準備ができている可能性があります。 たまたまコンテナーや CI/CD サービスに精通しておらず、専門的な理由でこの破損したコンパイルを行っていない場合、私はこれらの時間を無駄にすることはありません.
結論 私のコンピューターに対する欲求は時間の経過とともに変化することに同意するので、使用を中止したマシンに関係なく機能することがわかっているツールを使用することに感心しています。 そのおかげで、私はインストゥルメントを書いた後、使用をやめたマシンに遅れをとっていることにも感心しています。 したがって、破損したコンパイルは満足のいくものではありませんが、私だけでなく、専門的にコンピューター システムを広く使用している他の多くの人々にとって必要なことです
この作業は機能を分解して組み立てるための配置を検証しようとしているにもかかわらず、これらの提案はもっと良かったかもしれません。 私は、壊れたコンパイルをより簡単にする何かを受け取ることを望んでいました. とはいえ、C/C++ コードを書くのは簡単なことではありません 11、Rust はこれらのツールチェーンをコンパイルに使用します。
運が良ければ MIR
への改善を維持し、基本的には基本的にほとんどが Rust に基づいているコンパイラに完全に切り替える勢いが過剰にあるでしょう 12。 Rust がティア 1 プラットフォームで動作することが保証されている場合、Rust コードをアセンブルできる Rust で書かれたコンパイラが存在する可能性があります。
遅かれ早かれ、私が行った後、3 つの主要なオペレーティング システム間での Rust の破損したコンパイルで、単一の有用なリソース全体にチャンスがあったことはありませんでした。検索ラウンドを取ります。 そのおかげで、破損コンパイルに関するファイルが散らばっている組み合わせに我慢するブログを書く必要がありました。 他の人がその仕事をうまく利用できるように、私はそれを十分に要約したことを願っています.
このブログの長さは、すべてを並べていません。 Rust がアセンブルできるターゲットは全体で 90 あります。 Tier 1 プラットフォームの 3 つを完全に並べましたが、それも簡単ではありませんでした。 反対のターゲットを通過するエッジケースはさらに多くありますが、それらのターゲットを通過する場合、楽観的には、それらのスキルが向上したことに同意し、それを特定する可能性があります.
また、このブログの投稿では組み込みデバイスを明示的に選別しませんでした。 私はこのセーブのどのスキルにも同意しないことに同意するので、舵取りをするためにそれについて正しくコメントするつもりはありません. 私も同意見ですが、他の人々はの動機で) Rust Embedded ) このセーブで優れています。 クロステストの調査 Embedded Rust E-book または エンベドノミコンと一緒に食べたいなら
Rust クレートを破損コンパイルするための非常に優れた方法を誰かが見つけたら、私に知らせてください。 そうでない場合は、上記の同意事項に従います。