6

EmdebianがインストールされたRaspberryPIがあり、プロジェクトをクロスコンパイルしたいと思います。

ツールチェーンを入手し、それを使用して簡単なプロジェクトを構築する方法については、たくさんのドキュメントがあります。私自身、crosstool-ngを使用してツールチェーンを構築し、正常に動作するhelloworldプログラムを作成しました。

私が得られないのは、他のライブラリに依存しているQtのようなより複雑なプロジェクトをクロスコンパイルする方法です。Qtの依存関係の1つであるため、例としてlibdbusを使用してみましょう。

インストールされたEmdebianにはすでにlibdbus.soが含まれているので、Qtのすべての依存関係のコンパイルには時間がかかるため、当然、自分のlibdbus.soをクロスコンパイルするのではなく、これを使用することをお勧めします。

クロスコンパイルの場合、私が理解している限り、2つの重要なディレクトリがあります。

  1. インストールされているすべてのライブラリとアプリケーションが存在する「ステージング」ディレクトリ。これは最初はツールチェーンのsysrootディレクトリのコピーであり、クロスコンパイルされるとさらに多くのライブラリが追加されます。
  2. rootfs」ディレクトリ。これは、デバイス上にあるものと同等です。基本的に、ドキュメントやヘッダーファイルなどの不要なものを含まないステージングディレクトリのコピーです。私が理解している限り、最善のアプローチは、必要なファイルをステージングディレクトリからrootfsにコピーすることです。

rootfsディレクトリの取得は簡単です。これは、デバイスからのNFSマウントである可能性があるためです。しかし、PIに既存のEmdebianインストール用のステージングディレクトリを取得するにはどうすればよいですか?ステージングディレクトリには、rootfsにインストールされていないdbusヘッダーなどを含める必要があります。

apt-get install libdbus-devを使用してdbusヘッダーをデバイスにインストールし、rootfsをステージングディレクトリとして使用する人もいます。この設定では、rootfsとステージングの区別がなくなり、rootfsがヘッダーやドキュメントなどで汚染されるという欠点があります。もちろん利点はそれが簡単なことです。

dbusヘッダーをホストマシンのステージングディレクトリに入れる最良の方法は何ですか?この状況で人々が使用する通常のアプローチは何ですか?

副次的な質問として、ツールチェーンを取得し、プログラムをコンパイルしてから、それをターゲットにコピーするというアプローチがまったく機能するのはなぜですか?ツールチェーンには、独自のバージョンのlibc、libstdc ++などが付属していますが、ターゲットにインストールされているバージョンと互換性がありませんか?特に、crosstool-ngでコンパイルされたカスタムツールチェーンを使用して作成する場合はどうでしょうか。

(Qtをコンパイルする方法を尋ねていないことに注意してください。自分で理解できます。私の質問は、カスタムツールチェーンを既存のインストール/ rootfsと組み合わせる場合のアプローチについて、より一般的です)

4

1 に答える 1

1

私の経験では、dbusをコンパイルする必要はありません。あなたはそれをすることができます

https://wiki.debian.org/EmDebian/CrossDebootstrapによるdebootstrapによるDebianクロスrootfs
の作成crosstool-ngによるcros-compileツールチェーンの作成、およびカーネルバージョンとeglibcバージョンが最初のステップ
ビルドによって作成されたrootfsと同じであることを確認しますQT by

CPPFLAGS=-I<rootfs>/usr/include \
LDFLAGS=-L<rootfs>/lib -L<rootfs>/usr/lib -Wl,-rpath-link,<rootfs>/lib,<rootfs>/usr/lib \
./configure <your options>
make

によってステージディレクトリにQTをインストールします

make install DESTDIR=<stage directory>

ステージディレクトリのrootfsからQT依存ライブラリをコピーします

ご覧のとおり、ステージディレクトリは汚染されることなく最小限に抑えられています。

于 2014-06-17T02:36:43.413 に答える