
この記事では、クロスツールチェーン
crosstool-ngのアセンブリを自動化するための素晴らしいツールについて説明します。これは、自尊心のある組み込み開発者にとってほとんど不可欠なツールです。
arm-linux用に
x86-linuxからソフトウェアを真剣に構築する必要がある場合は、おそらく聞いたことがあるでしょう。
このガイドでは、アーキテクチャによるクロスコンパイルではなく、システムによるクロスコンパイル
-Darwinでの Linuxビルドについて説明します。
免責事項
OSで
crosstool-ngを構築するためのインターネットに関する記事がいくつかあり
ます 。たとえば、
benmont.comや
公式マニュアルなどです。 ただし、一部の記事では多くのエラーや古い情報があり、他の記事では一般的な機能のみが説明されています。 ここでは、2013年7月にツールチェーンを正常に構築したパスを説明します。
準備する
この部分は、OS X-
MacPortsまたは
Homebrewで使用するパッケージマネージャーによって異なります。 私はずっと前に自分でポートウェイを選んだので、これに基づいて書きます。
1.大文字と小文字を区別するファイルシステム
ここではすべてが簡単です。OSXにはユーティリティ
Disk Utilityがあり 、これを使用して新しいパーティションを作成します。 5 GB以上かかります。

2.ツール
MacPortsがインストールされていることが前提です。 次のパッケージをインストールします。
ncurses lzma libtool binutils gsed gawk grep gcc48
システム上にあるgccのバージョンを確認しましょう:
sudo port select --list gcc mp-gcc48が必要です
-sudo port select --set gcc mp-gcc48コマンドでデフォルトで選択します。
3. crosstool-ngのインストール
ツールキット自体の収集は非常に簡単です。公式の指示を使用します。
hg clone http://crosstool-ng.org/hg/crosstool-ng cd crosstool-ng ./bootstrap
公式の指示を中断
せざるを得ない :
kconfig / zconf.hash.cファイルに十分な行
がありません
#include <stddef.h>
./configure \ --with-objcopy=/opt/local/bin/gobjcopy \ --with-objdump=/opt/local/bin/gobjdump \ --with-readelf=/opt/local/bin/greadelf \ --with-sed=/opt/local/bin/gsed \ --with-libtool=/opt/local/bin/glibtool \ --with-grep=/opt/local/bin/grep \ --with-install=/opt/local/bin/ginstall make sudo make install
これにより、
ct-ngが
/usr/local/bin
インストールされます。 ホームディレクトリct-ng:リビジョンに応じて
/usr/local/lib/ct-ng.hg+default-2685dfa9de14
このディレクトリで、
スクリプト/関数ファイルを編集し、Darwinの行をLinuxの行に置き換えます。
これは、ct-ngが誤ってOS Xの元の
statではなくGNUセットの
gstatのバージョンを使用している
ためです。ローカルコードの美しさと優雅さを
賞賛し 、ファイルを閉じます。
bash-completionの
ct-ng.compスクリプトをコピーすることもできます。
次に、すばらしいクロスツールチェーンとそのsysrootが偽造される一時フォルダーを選択する必要があります。
/Volumes/Unixen/ct-config
あります。フォルダに移動して設定を開始します。
Crosstool-ngのセットアップ
構成を開始する前に、テンプレートから構成を継承します。
x86_64-unknown-linux-gnuに興味があります:
cd /Volumes/Unixen/ct-config ct-ng x86_64-unknown-linux-gnu ct-ng menuconfig
その後、ツールを設定するメニューが表示されます。
1.パスとその他のオプション
Local /Volumes/Unixen/src
ディレクトリ (
/Volumes/Unixen/src
)および
Prefixディレクトリ (
/Volumes/Unixen/${CT_TARGET}
)
/Volumes/Unixen/${CT_TARGET}
を指定することが重要です。作成することを忘れないでください
/Volumes/Unixen/src
2. Cコンパイラ
ここでは、機能を有効にしてビルドするときのGCCの動作がわからないため、JavaとFortranのサポートをオフにしました。
[] libstdc ++をgccバイナリに静的にリンクしないようにしてください。そうしないとエラーが発生します
collect2: error: ld returned 1 exit status ld: library not found for -lcrt0.o
3.デバッグ機能
ここでは、
dmallocと
ltraceのサポートを無効にする
必要があります。そうしないと、解決できない問題が発生します。
gdbセクションで、
[] Native gdbを無効にし、必要でない場合は
[*] Pythonスクリプトを有効にします (Pythonの問題ですが、解決策は低くなります)。 私は
gdbバージョン(7.3.1)を使用してい
ます 。
4.コンパニオンライブラリ
次のライブラリバージョンは厳密にここにあります。そうでない場合は、コンパイルエラーとオートツールがあります。これらのバージョンを入力して選択しました。
* GMP version (5.0.2) * MPFR version (3.1.2) * PPL version (0.11.2) * CLooG version (0.15.11) * MPC version (1.0.1)
ツールチェーンアセンブリ
ほとんどすべての準備が整いました。 ビルドプロセス中に次のエラーが発生する場合があります(カーネルバージョンは私のものです)。
[ERROR] /Volumes/Unixen/ct-config/.build/src/linux-3.8.11/arch/x86/tools/relocs.c:8:17: fatal error: elf.h: No such file or directory
したがって、信頼できるソースから
elf.hを
取得することにより、事前にこれを
処理します。 手元にない場合は、
elf.hを使用して
ください。 /usr/include
入れ
/usr/include
。
また、開いているファイルの制限を修正する必要があります(
RE:Libc iconvdataコンパイルの問題 ):
ulimit -n 1024
ビルド中にgdbでエラーが発生した場合、
[*] Pythonスクリプトを有効にする前に無効にしていない場合:
configure: error: python is missing or unusable
次に、
行をコメントアウトして.build / gdb-* / gdb / python / python-config.pyファイルを編集します
すべて準備完了のようです。
ct-ng build
i5を搭載したMacbook Airでは、アセンブリに約
69分かかり 、おそらくいくつかのエラーが途中でポップアップします。 そのため、コンピューターから離れても機能しません。
おわりに
/ボリューム/ Unixen $ du -csh ct-config / 4,0G ct-config/ 4,0G
/ボリューム/ Unixen $ x86_64-unknown-linux-gnu / bin / x86_64-unknown-linux-gnu-gcc -v Using built-in specs. COLLECT_GCC=x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-gcc COLLECT_LTO_WRAPPER=/Volumes/Unixen/x86_64-unknown-linux-gnu/libexec/gcc/x86_64-unknown-linux-gnu/4.7.3/lto-wrapper Configured with: /Volumes/Unixen/ct-config/.build/src/gcc-4.7.3/configure --build=x86_64-build_apple-darwin12.4.0 --host=x86_64-build_apple-darwin12.4.0 --target=x86_64-unknown-linux-gnu --prefix=/Volumes/Unixen/x86_64-unknown-linux-gnu --with-sysroot=/Volumes/Unixen/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/sysroot --enable-languages=c,c++ ..... Target: x86_64-unknown-linux-gnu Thread model: posix gcc version 4.7.3 (crosstool-NG hg+default-2685dfa9de14)
あなたは何かを収集しようとすることができます: cd linux-source-3.9 export PATH=$PATH:/Volumes/Unixen/x86_64-unknown-linux-gnu/bin export C_INCLUDE_PATH=/usr/include:/opt/local/include:/Volumes/Unixen/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/sysroot/usr/include make ARCH=x86_64 CROSS_COMPILE=x86_64-unknown-linux-gnu- all -j4
成功した
Xlabがありました。