命令aarch64を生成するためのGCC(9.2)クロスコンパイラ

参照

ラズベリーパイのためのクロスコンパイラとしてGCCの構築

どのようにGCCクロスコンパイラを構築します

 

環境

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.20 / 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.20(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

 

仕上がり。

おすすめ

転載: www.cnblogs.com/pengdonglin137/p/11565115.html