Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2806

bashのコンパイルについて

$
0
0
この記事は、bashのソースを読みたいがコンパイルの仕方を知らない人向けに書きます。 bashは以下の手順でコンパイルできます。 $ wget https://ftp.gnu.org/gnu/bash/bash-5.1.tar.gz $ tar -xzf bash-5.1.tar.gz $ cd bash-5.1 $ CFLAGS="-g -O0" ./configure $ make -j 7 この手順が完了すると、カレントディレクトリ内にbashという実行ファイルができています。 [追記] akinomyogaさんから教えていただきました。 ソースを読むには、開発版のほうが適しているそうです。 (デバッグ用のコードやデバッグ用のmallocが有効になる。) 上記のコードの以下のように変更します。 $ git clone git://git.savannah.gnu.org/bash.git $ cd bash $ CFLAGS="-g -O0" ./configure $ make -j 7 以下に各行の大まかな意味を書きます。 $ wget https://ftp.gnu.org/gnu/bash/bash5.1.tar.gz このコマンドでbashのソースをダウンロードします。 wgetとはnetwork downloaderです。 詳しくはman wgetとかで調べるといいと思いますが、 適当に $ wget https://google.com とかをやってみると、何をやっているのか解ると思います。 $ tar -xzf bash5.1.tar.gz これでファイルを展開します。(man tarを参照) $ cd bash-5.1 カレントディレクトリを変更します。 $ CFLAGS="-g -O0" ./configure このコマンドで、Makeというビルドツールに使う Makefileというファイルを生成します。 Makeは内部でgccを呼び出しています。 $ ./configure だけでもMakefileは生成されますが、 コンパイル時に使うフラグを指定するために $ CFLAGS="-g -O0" ./configure とします。 フラグ -g を使うことで、コンパイルされるオブジェクトファイルにデバッグ情報を埋め込みます。 フラグ -O0 を使うことで、最適化レベルを最低にします。 gccはコンパイル時に最適化という処理を行っており、 このフラグがない場合、ソースコードとオブジェクトファイルの対応が 変わってしまい、ソースの追跡が難しいです。 $ make -j 7 ビルドします。 フラグ" -j n "を使うことで、マルチプロセスでビルドしてくれるため、ビルドが早く終わります。nは整数です この場合は7を指定することで7つのプロセスで分割してビルドしています。 以上が終わると、カレントディレクトリ内にbashという実行ファイルができています。 すべてをもとに戻したい場合は $ make clean とすれば、実行ファイル、Makefileなどがすべて消えるので、またはじめからやり直せます。 適当なフラグを指定して、実験してみると何が起こっているのかわかります。 ビルド   = コンパイルやリンクなど様々な処理を経て、実行ファイルを生成すること コンパイル = ソースコードからリンクする前のオブジェクトファイルを生成すること

Viewing all articles
Browse latest Browse all 2806

Trending Articles