参照
環境
PC:ubuntu18.04 64位(インテル(R)Core(TM)i7-4790 CPUの@の3.60GHz)
GCC:gccのバージョン7.4.0(Ubuntuの7.4.0-1ubuntu1〜18.04.1)
テキスト
ここでは、使用3 GCCクロスコンパイラパッケージです:のbinutils、glibcのとgcc、下記のダウンロードリンク:
binutils:https://mirrors.nju.edu.cn/gnu/binutils/、私は、ダウンロードのbinutils-2.32.tar.xzを
glibcの:https://ftp.gnu.org/gnu/glibc/、私は、ダウンロードのglibc-2.30.tar.xzを
GCC:https://github.com/gcc-mirror/gcc、私はダウンロード:GCC-9_2_0-リリース(カットを対応するタグを選択し、ラベルをタグ付けします)
1、コンパイルに必要なソフトウェアパッケージをインストール
sudoのaptの更新 はsudo aptのアップグレード sudoは aptのインストールビルド不可欠gawkのバイソンtexinfoのgitのファイルを
2、新しいパスは、次のすべての操作は、環境変数の変化を避けるために、端末に完了する必要があります
ます。mkdir -p /ホーム/ pengdl /仕事/ GNU / mk_cross_compiler / CD /ホーム/ pengdl /仕事/ GNU / mk_cross_compiler
3、パッケージをダウンロードし、解凍します
$ PWD /ホーム/ pengdl /仕事/ GNUは/ mk_cross_compilerの $ は、mkdir コード $のCDコード の$ タール ./binutils- -xf 2.32。タール .xz- $ タール -xf ./glibc- 2.30。タール .xz- $ タール -xf ./ GCC -9_2_0リリース。タール .gzを
4、新しくアンパックGCCのソースディレクトリに、依存パッケージをダウンロードしてください
CDのgccの -9_2_0 / 。/ contribの/ download_prerequisites
図5は、クロスコンパイラは、実行可能なプログラムを格納するパスを作成し、あなたのPATHを追加します
CD /ホーム/ pengdl /仕事/ GNU / mk_cross_compiler ます。mkdirクロスgccの 輸出PATH = /ホーム/ pengdl /仕事/ GNU / mk_cross_compiler /クロスgccを / binに:$ PATHに
6、将来はシステムコールのカーネルに対応する呼び出し元のアプリケーションをコンパイルするために、独自のクロスコンパイラツールを使用できるように、カーネルヘッダをインストール
CD /ホーム/ pengdl / aarch64 / android_kernel / linux- 4.14 作る ARCH = arm64 INSTALL_HDR_PATH = /ホーム/ pengdl /仕事/ GNUは/ mk_cross_compiler /クロスのgcc / aarch64-のlinux-gnuのheaders_install
7、コンパイルとbinutilsのインストール
CD /ホーム/ pengdl /仕事/ GNU / mk_cross_compiler ます。mkdirビルド- のbinutils CD構築 -binutils / .. /コードを/ binutils- 2.32 /設定--prefix = /ホーム/ pengdl /仕事/ GNU / mk_cross_compiler /クロスgccの -ターゲット= aarch64-のlinux-gnuの--disable- multilibの--with-アーチ= armv8 メイク - J8 作る インストール
ここでのglibcとgcc、相互に依存する2以来、その私たちのGCCコンパイラの最初の部分、そして部分的にコンパイルされたglibc、gccのコンパイラおよび最終的にはすべてのglibcをコンパイルし始めました。
8、GCCコンパイラの一部
CD /ホーム/ pengdl /仕事/ GNU / mk_cross_compiler ます。mkdirビルド- gccの CDビルド - gccの ... /コード/ gccの -9_2_0 /設定--prefix = /ホーム/ pengdl /仕事/ GNU / mk_cross_compiler /クロスgccの --target = aarch64-のlinux-gnuの--enable-言語= C、C ++ --disable- multilibの 作るオールのgccを - J8 作る インストール - GCC
9部分的にコンパイルされたglibc
CD /ホーム/ pengdl /仕事/ GNU / mk_cross_compiler ます。mkdirビルド- glibcの CD構築 -glibc / ... /コード/ glibc- 2.30 /設定--prefix = /ホーム/ pengdl /仕事/ GNU / mk_cross_compiler /クロスGCC / aarch64 -linux-gnuの--build = $ MACHINE -ホスト= aarch64-のlinux-gnuの--target = aarch64-のlinux-gnuの--with-ヘッダ= /ホーム/ pengdl /仕事/ GNU / mk_cross_compiler /クロスGCC / aarch64 / -linux-gnuのは--disable-multilibのlibc_cv_forced_unwind =含まはい 作る インストール -bootstrap-ヘッダ= yesのインストール - ヘッダが 作る -j8 CSU / subdir_lib インストールCSU / crt1.o初CSU / CSU crti.o / crtn.o /ホーム/ pengdl /仕事/ GNU / mk_cross_compiler /クロスのgcc / aarch64-のlinux-gnuの/ libに aarch64 -linux-gnu- gccの -nostdlib -nostartfiles -shared -xcは/ dev / nullに -o /ホーム/ pengdl /仕事/ GNU / mk_cross_compiler /クロスのgcc / aarch64-のlinux-gnuの/ / libにlibc.so タッチ /ホーム/ pengdl /仕事/ GNU / mk_cross_compiler /クロスGCC / aarch64-のlinux-gnuの/ / GNU / stubs.h含み
10、GCC 9.2は、ソースコードを変更するか、コンパイラは文句を言います
/home/pengdl/work/GNU/mk_cross_compiler/code/gcc-9_2_0/libsanitizer/asan/asan_linux.ccを変更し、ライン77に次のコードを追加します。
#ifndefのPATH_MAX の#define PATH_MAX 4096 #endifの
11、次いで部分的にコンパイルGCC
CD /ホーム/ pengdl /仕事/ GNU / mk_cross_compiler /ビルド- gccを 作るすべての-標的- -j8 のlibgccを 作る インストール -target-のlibgccを
12、すべてのコンパイルされたglibc
CD /ホーム/ pengdl /仕事/ GNU / mk_cross_compiler /ビルド- glibcを 作る - J8を 作る インストール
13、すべてのGCCコンパイラ
CD /ホーム/ pengdl /仕事/ GNU / mk_cross_compiler /ビルド- gccの メイク - J8 作る インストール
14、テスト
まず、生成されたGCCコンパイラの私たち自身のバージョンを見てみましょう。
$ aarch64-linuxの-gnu- gccの - V 使用して構築 - にスペック。 COLLECT_GCC = aarch64-linuxの-gnu- gccの COLLECT_LTO_WRAPPER = /ホーム/ pengdl /仕事/ GNU / mk_cross_compiler /クロスのgcc / libexecに/ GCC / aarch64-linuxの-GNU / 9.2。0 / LTO- ラッパー 対象:aarch64 -linux- GNU で構成.. /コード/ gccの -9_2_0 /設定--prefix = /ホーム/ pengdl /仕事/ GNU / mk_cross_compiler /クロスgccの --target = aarch64-linuxの-gnu --enable-言語= C、C ++ --disable- multilibの スレッドモデル:POSIX gccのバージョン9.2。0(GCC)
hello_world.cを書きます:
$の猫hello_world.c する#include <stdio.hに> int型のmain(int型のargc、constのchar型 * ARGV []) { のprintf(" Hello Worldの\ nを" ); リターン0 ; }
テストをコンパイルします。
$ aarch64-linuxの-gnu- gccの --static hello_world.c - O hello_world $ qemuの -aarch64 ./ hello_world のHello World
仕上がり。