3

Ubuntu9.10ボックスにクロスコンパイル環境を設定したいのですが。これまでに読んだドキュメント(たとえばこれら のドキュメント)から、これにはターゲットプラットフォームのツールチェーンのコンパイルが含まれます

私の質問は、特定のターゲットプラットフォームのツールチェーン内の各パッケージに必要なバージョンをどのように決定するかです。従うことができる経験則はありますか?

これは、上記のリンク先のWebサイトの1つにあるリストです。

binutils-2.16.1.tar.bz2
linux-2.6.20.1.tar.bz2
glibc-2.5.tar.bz2
glibc-linuxthreads-2.5.tar.bz2
gcc-core-4.2.0.tar.bz2
gcc-g ++-4.2 .0.tar.bz2

しかし、標準のUbuntu8.04およびCentOS5.3ボックスの実行可能ファイルを生成したいとします。必要なパッケージは何ですか?

私の主なニーズは、お客様のマシンで「/usr/lib/libstdc++.so.6:バージョン `GLIBCXX_3.4.11'が見つかりません」などのエラーを回避することですが、将来的にはさまざまなアーキテクチャにも対応したいと考えています。

4

4 に答える 4

4

一般に、ターゲットシステムにある同じバージョンのlibc(および他のライブラリ)を使用するクロスツールチェーンを構築することをお勧めします。これは、バージョン管理されたシンボルを使用するライブラリの場合に特に重要です。そうしないと、「/ usr / lib / libstdc ++。so.6:バージョン'GLIBCXX_3.4.11'が見つかりません」などのエラーが発生する可能性があります。

同じアーキテクチャ

標準のUbuntu8.04およびCentOS5.3システムの実行可能ファイルを生成するために、仮想マシンにディストリビューションをインストールし、仮想マシン内から必要なコンパイルを実行して、結果のバイナリが各ディストリビューションのライブラリバージョンと互換性があることを保証できます。

もう1つのオプションは、ターゲットディストリビューション用に仮想マシンの代わりにchrootビルド環境をセットアップすることです。

さまざまな環境(さまざまなライブラリバージョン)を対象としたツールチェーンを構築し、仮想マシンやchroot環境を使用せずにUbuntu9.10環境で構築することもできます。このようなクロスツールチェーンを作成するために、DanKegelのクロスツールを使用しました。

異なるアーキテクチャ

別のクロスコンパイラの質問への回答で述べたように、腕のクロスツールチェーンを作成するためにDanKegelのクロスツールを使用しました。

少し古くなっているように見えますが、gcc、glibc、binutils、およびlinuxカーネルヘッダーの適切な組み合わせを決定するのに役立つさまざまなアーキテクチャのビルド結果のマトリックスがあります。

必要なパッケージバージョン

私の経験では、経験則は実際にはありません。gcc、binutils、glibc、およびlinuxヘッダーのすべての組み合わせが正常にビルドされるわけではありません。ビルドが完了した場合でも、ビルドの成功を検証するには、ある程度のテストが必要です。これは、Linuxカーネルを新しいクロスツールチェーンでコンパイルすることによって行われることがあります。ターゲットシステムとアーキテクチャによっては、ビルドを成功させるためにソースのパッチを適用する必要がある場合があります。


このクロスコンパイル環境をUbuntu9.10でセットアップしているので、dpkg-crossパッケージを調べることをお勧めします。

于 2010-02-25T20:51:18.617 に答える
2

他のLinuxディストリビューションのコンパイルは、仮想マシンにインストールして(apt-get install kvm)、内部からコンパイルするのが最も簡単です。それらをスクリプト化して自動的に実行することもできます。クロスコンパイラを構築し、他のLinuxディストリビューションのように、すべてのライブラリなどのまったく同じバージョンを提供することはほぼ不可能です。

于 2010-02-25T18:59:15.693 に答える
2

私の質問は、特定のターゲットプラットフォームのツールチェーン内の各パッケージに必要なバージョンをどのように決定するかです。... binutils-2.16.1.tar.bz2 gcc-core-4.2.0.tar.bz2 gcc-g ++-4.2.0.tar.bz2

通常、最新の安定版を選択します。これらはローカルツールチェーンにのみ影響し、ランタイムには影響しません。

linux-2.6.20.1.tar.bz2

これは必要ありません。(組み込みプラットフォームをターゲットにする場合は、それを使用できます。)

glibc-2.5.tar.bz2 glibc-linuxthreads-2.5.tar.bz2

これらは必要ありません。つまり、それらをダウンロードしたりビルドしたりしないでください。サポートしたい最も古いディストリビューションのバージョンに対してリンクする必要があります。

従うことができる経験則はありますか?しかし、標準のUbuntu8.04およびCentOS5.3ボックスの実行可能ファイルを生成したいとします。必要なパッケージは何ですか?

ターゲットとするディストリビューションを調査し、libc、libstdc ++、pthreads、およびリンクするその他の共有ライブラリの最小公分母バージョンを見つけてから、これらのLCDバージョンが含まれるボックスからこれらのライブラリと対応するヘッダーをコピーします。ツールチェーン。[編集]明確にする必要があります。あなたは本当にすべての依存ライブラリを単一のシステムから取得したいのです。さまざまなディストリビューションから各ファイルバージョンのLCDを選択して選択することは、依存関係地獄への素早い旅行のレシピです。

于 2010-03-02T16:26:51.983 に答える
0

ターゲットプラットフォームに応じて、Optwareの使用を検討しましたか?

私は現在、クロスコンパイルツールチェーンを使用してPalm Pre用にMonoとMoonlightを構築することに取り組んでいます(そしてOptware makefilesはすでに依存関係の大部分を処理しています)。

于 2010-02-25T18:59:34.290 に答える