ぬうぱんの備忘録

技術系のメモとかいろいろ

作った曲一覧はこちら

gccで実行ファイル生成時に-gの指定?

この記事は

 gccで実行ファイルを生成するときに-gをつけているmakefileを見かけてめちゃくちゃ不安になったので、リンク時の-gに意味があるのか検証した記事。

前提条件

 普通は

$gcc -c hoge.c piyo.c
$gcc -o foo hoge.o piyo.o

みたいに

  1. 各ソースをコンパイルしてオブジェクトファイルを全部作る
  2. オブジェクトファイルをまとめて実行ファイルを生成

の手順でプログラムをビルドすると思います。makefileの場合もおんなじことをしていると思います。
 で、デバッグ情報を付加しようと思ったら-gとか-ggdb3とかのオプションをつけると思います。コンパイル時につけるのは当然として、実行ファイル生成時も必要なのか・・・?

$gcc -g -c hoge.c piyo.c
$gcc -g -o foo hoge.o piyo.o # ここの-gは意味があるのか?

検証方法

以下の手順で生成されるバイナリに差が出るかチェック。

$gcc -g -c hoge.c piyo.c
$gcc -o disable_debug hoge.o piyo.o
$gcc -g -o enable_debug hoge.o piyo.o
$diff disable_debug enable_debug

実行ファイル生成時の-gの有無で実際に生成される実行ファイルに違いが出るかを調べる。適当にhogeとかpiyoとかしてるけど、手元の適当なプロジェクトでも同じことをして検証してます。

結果

 完 全 に 一 致

結論

 何がどうなってこういうことになってるのかはわからないけど、実行ファイル生成時の-gは意味をなさない。失敗はしないから付けてもいいのだろうけど・・・。