
私は苦しんでいます最初からLinux 11.0本。存在する三。 LFSクロスツールチェーンとステージングツールの構築、ii。ツールチェーン技術の説明、カナダのクロスコンパイルについて少し説明します。最終結果を得るためになぜ3段階と3台の機械が必要なのか理解できません。テキストコンピュータAとAで実行され、Aのバイナリを生成するコンパイラで始まるとします。それでは、Cで実行され、C用のバイナリを構築するコンパイラを構築するためにそのコンパイラを使用するのはどうでしょうか?まず、Aで実行されますが、B用にビルドされたコンパイラをビルドし、Bで実行されますが、C用にビルドされたコンパイラをビルドし、最後にCで実行され、C用にビルドされたコンパイラをビルドするなど、多くの困難を経験する理由とは何ですか?
Wikipediaでもこれに関する記事を見つけました。https://en.wikipedia.org/wiki/Cross_compiler。
答え1
説明されたシーンはこんな感じです
- マシンAは遅く、コンパイラがあります。
- マシンBは高速ですが、コンパイラはありません。
- マシンCはターゲットですが遅く、コンパイラはありません。
AからCのすべてのバイナリを構築できますが、マシンAが遅いので時間がかかります。
著者は、AからBのコンパイラをクロスコンパイルするのに少し時間を費やすことが価値があると信じています。その後、高速システムBを使用して、低速システムCに必要なすべてのバイナリをクロスコンパイルすることで、AまたはCでのコンパイルを防ぐことで、全体の時間を短縮できます。
最後のステップは、CベースのC用コンパイラを構築し、システムBへの依存関係を排除することです。速度は非常に遅いですが、Machine Cは時々プログラム自体を直接コンパイルすることができます。
答え2
まず、コンピュータCは実際にコンパイルできるわけではありません。組み込みデバイスでも、コンパイル用に設定したくないプロダクションマシンでもかまいません。
だからあなたはそのような「nix」マシンを持っています。クロスコンパイルできるはずです。
あなたが持っているのはビルドマシンです。 Bです。十分に高速で強力なマシンでしたが、コンパイラはありませんでした。 C用は苦労してB用に作られたコンパイラもありません。 C用の項目を作成するためにこれを使用したいと思います。
どうやって得るの?まあ、あなたはBコンパイラ、好ましくはCで直接クロスコンパイルする人と話します。次にそれをBにダウンロードして、カスタムシステムに合わせてCをクロスコンパイルするために使用します。
B用コンパイラはどこで入手しましたか?彼らのシステムはBのシステムとは異なる可能性が高いです。どうやって始めますか?
彼らにとって本当に必要なのは、システムAとA用のプログラムをコンパイルするコンパイラです。
これで、Aにインストールされているこのコンパイラはクロスコンパイラを構築できない可能性があります。これは特定の言語用のコンパイラです。氏)はサプライヤーまたは他の製品によって提供されます。
必要なのは、B用のバイナリをコンパイルできるクロスコンパイラです。これを行うには、まずA-to-Aコンパイラ(「ベンダー」コンパイラ)を使用し、Bへのクロスコンパイルをサポートするコンパイラをコンパイルします。
次に、それ次に、BからCにコンパイルするクロスコンパイラをコンパイルするように要求します。
だからあなたが配布それコンピュータBとCを使用している人のためのBCコンパイラ。
...
今これは本当の問題です。ベンダーのコンパイラがインストールされているMicrosoft Windowsコンピュータ、Solaris Unixコンピュータ、またはmacOSコンピュータがあります。すべての場合に簡単にコンパイラを取得できますが、クロスコンパイラは取得できません。これらのベンダーはクロスコンパイラを提供することにほとんど興味がありません。
ツールを提供するすべての人が持っているコンピュータ(BとC)はありません。したがって、「ロックされた」システムAから起動して、ユーザーがダウンロードできるように、事前に構築されたツールセット全体を構築して展開できます。
「ハード」要件は、コンピュータAにBからCへのクロスコンパイラをコンパイルできるコンパイラがあることです。コンパイラの実行命令セットとコンパイラのターゲット命令セットはともに、A に対して外部です。
答え3
エマ・ルーオの答えLFS が提案するロジックについて説明します。私は、LFSが3方向の「Canadian Cross」編集について良い説明を提供すると信じていません。
マシンAがマシンC用にコンパイルするマシンB用のコンパイラを作成するとします。
マシンCの制限により、BとCは通常異なります(例)。たとえば、開発者がマシンC用のコードをコンパイルしたいのですが、Cの機能は非常に制限的です。小規模コンピュータ会社あるいは、組み込みデバイスであり、CPUとメモリの制限により、独自のコンパイラを簡単に実行することはできません。したがって、開発者はCをコンパイルするために、より強力なデスクトップ(コンピュータB)を使用します。
AとBはほとんど異なりますが、リソースの制約によるものではありません。より一般的な理由は、通常、コンパイラ自体をコンパイルした開発者が最終的なCコードをコンパイルした開発者とは異なるためです。彼らは通常同じ組織に属していません。
はい
Ubuntuパッケージを入手gcc-arm-linux-gnueabihf。これはUbuntuのコア開発者によって管理されます。他のコンピュータ(AMD64コンピュータなど)でARMプログラムをコンパイルしたい人は誰でもこのパッケージをダウンロードできます。つまり、誰でもBにインストールしてCをコンパイルでき、Ubuntu Core開発者はシステムのBとCを制御できません。
Ubuntu Core開発者は、amd64、arm64、i386で実行するようにgcc-arm-linux-gnueabihfをコンパイルします。彼らは3つのバージョンをすべてビルドするために3つのビルドマシンを必要としないし、必要としません。その理由はマシンですできるマシンBとCのアーキテクチャは異なります。