LoginSignup
0
2

More than 3 years have passed since last update.

ubuntuでc言語(x86_64用)のクロスコンパイラを作ろう(mintも可)

Last updated at Posted at 2018-12-27

ubuntuでc言語のクロスコンパイラを作ろう

普段はcentosかfreebsdを使用しているのですが、osを自作するにあたりクロスコンパイラが必要になったので、ubuntuも使うことにしました。クロスコンパイラの構築に思いの外時間がかかったのでここに備忘録を残します。あと、rootになっておいてください。

1.必要なソースコードやパッケージ

パッケージをインストール
sudo apt install -y 

1.gccのソースコード(https://ftp.gnu.org/gnu/gcc/)
2.binutilsのソースコード(https://ftp.gnu.org/gnu/binutils/)
3.build-essential[makeコマンドをインストール]
4.bison(https://ftp.gnu.org/gnu/bison/)
5.flex(https://github.com/westes/flex/releases)
6.libgmp3-dev(https://ftp.gnu.org/gnu/gmp/)
7.libmpc-dev(https://ftp.gnu.org/gnu/mpc/)
8.libmpfr-dev(https://ftp.gnu.org/gnu/mpfr/)
9.texinfo(https://ftp.gnu.org/gnu/texinfo/)
10.libcloog-isl-dev(https://www.cloog.org)?
11.libisl-dev(http://isl.gforge.inria.fr)
12.gcc(パッケージのやつ)
13.g++(パッケージのやつ)

さすがubuntu。必要なツールのパッケージは殆ど揃ってますね。
ubuntuは1,2以外はすべてパッケージが用意されています(1,2は環境にチューニングされていると困るので自分でビルドします)。以上に記された名前のパッケージをインストールしてください。括弧はソースコードのURLを示しています。パッケージが無いときはこちらからソースコードをダウンロードしてビルド([1]tar -xvfで解凍[2]./configureをソースコードのディレクトリで実行[3]makeコマンドを実行[4]make installコマンドを実行)してください。

2. 環境変数を設定

環境変数を設定
export PREFIX="/usr/local"
export TARGET=x86_64-elf
export PATH=$PATH:$PREFIX/bin

PREFIX(コンパイラを呼び出すときに使用するアドレス(コンパイラが置かれるアドレス))
TARGET(コンパイラのバイナリを処理させる環境)
PATH(コンパイラのバイナリが置かれる場所。PATH:を忘れると変数が初期化されてしまうので気をつけてください)

TARGETに指定できる環境(他にもあります)
x86_64 : x86_64-elf
i386 : i386-elf
i686 : i686-elf
aarch : aarch64-elf
powerpc: powerpc-elf

3.binutilsのビルド

binutilsのビルド
mv binutils-x.y.z /usr/local(PREFIXに指定したアドレス)

cd $PREFIX

mkdir build-binutils
cd build-binutils
../binutils-x.y.z/configure --target=$TARGET --prefix="$PREFIX" --with-sysroot --disable-nls --disable-werror
make
make install

4.gccのビルド

gccのビルド
mv gcc-x.y.z /usr/local(PREFIXに指定したアドレス)

cd $PREFIX

mkdir build-gcc
cd build-gcc
../gcc-x.y.z/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --enable-languages=c,c++ --without-headers 
make all-gcc
make all-target-libgcc
make install-gcc
make install-target-libgcc

5.クロスコンパイラの呼び出し

(例)クロスコンパイラを呼び出し
x86_64-elf-gcc 

TARGETがi386のときはi386-elf-gccとなります。
先に設定しているので大方大丈夫だと思いますが上記のように"TARGET"+-gccの形で呼び出せないときは、

PATHにクロスコンパイラのコマンドのアドレスを追加
export PATH=$PATH:$PREFIX/bin

6.最後に

これでクロスコンパイラは用意できました。一般ヘッダはlinuxやbsdの場合はダウンロード出来ます。

8.参考文献

OSdev.org(一部内容を変更してお送りしました。)

ちょっとmemo

1.-Ttext org(それぞれ出力ファイルの bss、 data、 text セグメント に対して org を開始アドレスにする。 org は 16 進の整数でなければならない。)
2.-nostdlib

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2