この記事では、クロスツールチェーン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の行に置き換えます。
--- scripts/functions.orig 2013-07-09 22:15:12.000000000 +0400 +++ scripts/functions 2013-07-06 04:28:41.000000000 +0400 @@ -460,7 +460,7 @@ mode="$(stat -c '%a' "$(dirname "${dir}")")" ;; Darwin|*BSD) - mode="$(stat -f '%Lp' "$(dirname "${dir}")")" + mode="$(stat -c '%a' "$(dirname "${dir}")")" ;; *) CT_Abort "Unhandled host OS $CT_SYS_OS"
これは、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ファイルを編集します
# if getvar('LINKFORSHARED') is not None: # libs.extend(getvar('LINKFORSHARED').split())
すべて準備完了のようです。
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がありました。