2013-03-16 5 views
5

EmdebianがインストールされたRaspberry PIがインストールされており、プロジェクトをクロスコンパイルしたいと思っています。既存のrootfsとカスタムツールチェインの組み合わせ

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

他のライブラリに依存するQtのような、より複雑なプロジェクトをクロスコンパイルする方法を教えてください。libdbusを例として使ってみましょう。これはQtの依存関係の1つです。

既にインストールされているEmdebianにはlibdbus.soが含まれていますので、私自身のlibdbus.soをクロスコンパイルするのではなく、Qtの依存関係をコンパイルするのに多くの時間がかかります。

クロスコンパイル用

、私が理解限り、二つの重要なディレクトリがあります。

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

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

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

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

逆の質問として、ツールチェーンを取得し、プログラムをコンパイルしてからターゲットにコピーするというアプローチはどうしてですか?ツールチェインにはlibc、libstdC++などの独自のバージョンが同梱されていますが、それらはターゲットにインストールされているバージョンと互換性がありませんか?特に、クロスコンパイルでコンパイルされたカスタムツールチェインを使用して作成する場合?

(私はQtのをコンパイルする方法を求めていないのです、私は自分自身をそれを把握できることに注意してください。私の質問は、既存のインストール/ rootfsのでカスタムツールチェーンを組み合わせたときに取るべきアプローチについて、より一般的である)

答えて

1

私の経験上、dbusをコンパイルする必要はありません。あなたはcrosstool-ngのことで、あなたのCROは、コンパイルツールチェーンを作成し、カーネルのバージョンとeglibcバージョンを確認してくださいhttps://wiki.debian.org/EmDebian/CrossDebootstrap
ではdebootstrapでDebianのクロスにrootfsを作成

としてそれを行うことができます第一ステップ
によって作成されたrootfsのと同じです

make install DESTDIR=<stage directory> 
rootfsの目から

コピーQT依存するライブラリによって、ステージディレクトリにQTをインストール

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を構築あなたのステージディレクトリ

ステージディレクトリは汚染なしで最小限に保たれていることがわかります。

+0

恐ろしい、debootstrapは私が探していたものです。 OpenSuSEで動作するようになったのですが、結局は完璧です:) –

関連する問題