タグ

gccに関するrabbit2goのブックマーク (9)

  • Makefileでワイルドカードを使う方法 - nao-bambooの日記

    はじめに 最近、C言語でコードを書くことが多く、頻繁にmakeコマンドを使っている。 ただ、単純な設定だと、ファイルを追加するごとにMakefileにもファイル名を追記しなければならず、この操作が大変煩わしい。 そこで、Makefileの勉強を兼ねて、これを自動化する設定を考えてみた。 要件 要件は、 実装ファイル (.c) を追加した時に自動でコンパイルの対象になること。 ソースファイルがあるディレクトリ (src) とは別の、出力用ディレクトリ (build) に実行ファイルが生成されること。 buildディレクトリではsrcのディレクトリ構造が維持された状態で、中間オブジェクトファイルが生成されること。 とする。 サンプルのディレクトリ構成 コンパイル前のソースツリーは以下の通り。 . ├── Makefile ├── include │   └── common.h └── src

    Makefileでワイルドカードを使う方法 - nao-bambooの日記
  • GDBでデバッグするなら-g3オプション - 2013-05-08 - ククログ

    RubyPythonなどのスクリプト言語では実行中に例外が発生するとバックトレースを出力してくれます。バックトレースがあるとどこで問題が発生したかがわかるためデバッグに便利です。一方、CやC++では不正なメモリアクセスをすると、バックトレースではなくcoreを残して1終了します2。デバッガーでcoreを解析するとバックトレースを確認できます。 このように、CやC++でデバッグするときにデバッガーはなくてはならない存在です。スクリプト言語にもデバッガーはありますが、デバッガーを使わなくてもデバッグできる範囲が広いため、CやC++をデバッグするときのほうがデバッガーのありがたさがわかります。 この記事では、広く使われているデバッガーであるGDBをもっと便利に使うためのGCCのコンパイルオプション-g3を紹介します。 サンプルプログラム まず、この記事で使うサンプルプログラムを示します。マクロ

    GDBでデバッグするなら-g3オプション - 2013-05-08 - ククログ
  • Linux共有ライブラリの簡単なまとめ - wagavulin's blog

    Linuxで共有ライブラリ(*.so)を作るようになったのでちょっと勉強してみた。今までは使うだけだったので、以下のようなことは知っていた。 作るときはgccの-sharedオプションを使う。 使うときはgccの"-lライブラリ名"でリンクするライブラリを指定する。 リンク時のライブラリ探索パスは-Lオプションで指定する。 実行時のライブラリ探索パスは/etc/ld.so.confに書いてあるディレクトリ。環境変数LD_LIBRARY_PATHでも指定可能。 ライブラリを作るときは、.cから.oを作るときに-fPICをつけるといいらしい。 新しくライブラリを入れたときはldconfigするといいらしい。 逆に今まであまり知らなかったこと。 ほとんどのライブラリはlibhoge.so, libhoge.so.1, libhoge.so.1.1のように3つくらいのファイルがあり、libhoge

    Linux共有ライブラリの簡単なまとめ - wagavulin's blog
  • KMC Staff Blog:Makefileの依存関係の記述を自動化する簡単な方法

    2013年02月08日 Makefileの依存関係の記述を自動化する簡単な方法 ビルドにmakeコマンドを使うときにはMakefileにファイルの依存関係を書いておく必要があります。 しかし、開発の途中でインクルードするヘッダファイルが増えてくると、これらの依存関係を手作業で記述するのは面倒です。(そして、これをサボったことでハマることもよくあることです。:) ここでは、gccの機能を使ってこれを自動化する方法を紹介します。 gccのプリプロセッサで依存関係を自動生成する gccでコンパイルするときに -MD というオプションをつけると、コンパイルとともに拡張子が.dのファイルが作成されます。これはMakefileと同じ書式でそのファイルの依存関係が記述されています。 詳しくはgccのマニュアルを参照してください。 http://gcc.gnu.org/onlinedocs/gcc-4.7

  • gcc のデバッグ術

    Unix系コマンドラインユーザーのための、 gcc/g++/g77 による開発におけるデバッグ術を簡単に紹介します。 以下の内容は gcc 2.7.2.3 での動作は確認しています。 g++/g77 でも恐らくは通用すると思うのですが、 ひょっとすると異なる部分があるかもしれません。 筆者は g++/g77 の使用経験がないので、その場合は御容赦を願います。 実行前 キーワード「コンパイルオプション, -Wall, -O2, -O4」 まずは gcc にオプション opt'-Wall' を付けてコンパイルし、 警告がなくなるまでソースを修正します。 これは 常識 です。 次に opt'-O4 -Wall' でコンパイルします。 「未初期化変数の使用」の警告 (`foo' might be used uninitialized in this function) は、 opt'-O4' を付

  • gcc+gdbによるプログラムのデバッグ 第1回 ステップ実行、変数の操作、ブレークポイント

    しかし、ブレークポイントという機能はデバッガの手助けなしでは実現できません。 ブレークポイントとはプログラムの強制一時停止を行うポイントで、実行中のプログラムがブレークポイントに遭遇するとプログラムは一時停止され、デバッガによるプログラムへの介入を行えるようになります。 ブレークポイントは次のような場所に設定できます。 指定した行番号のプログラムを実行しようとする瞬間 関数を呼び出した瞬間 その他、C++などでは「例外が発生した瞬間」などにもブレークポイントを設定することができます。 行番号ブレーク ブレークポイントとしてよく使用されるのは、「プログラムの特定の位置」です。 例として、bubblesort.cプログラムのsort関数内で、隣り合う二つの要素を比較している箇所にブレークポイントを設定してみます。 25|/* bubble sort */ 26|void sort(int *a

  • gccで関数呼び出しのコールグラフを生成する方法 | ミネルヴァの梟は黄昏とともに飛び始める(山下 大介 公式ブログ)

    先日のC言語のプログラムにテストコードを書こうとしたら、仕様書が存在しない事が発覚!サービスに機能が追加されるタイミングの拡張案のドキュメントがいくつか存在するのみという事なので、まずは仕様をドキュメントにまとめる事に。 完全網羅の仕様をまとめるには、コールグラフを作成するのが良い(デバッグする時にはあまり意味が無いので注意)ので、早速コールグラフを作成していたら社員から、やり方教えてと言われたのでブログにまとめる事に。。。 とりあえず、gccなど開発ツールは入っているという前提で、、、 私はegyptというツールを使います。 wget http://www.gson.org/egypt/download/egypt-1.6.tar.gz tar zxf egypt-1.6.tar.gz cd egypt-1.6 perl Makefile.PL make sudo make instal

  • iPhone 開発に使える C99 仕様と gcc 拡張 - 2009-04-23 - Windchase

    iPhone アプリの開発には、コンパイラとして gcc 以外を使うことは基的にありません。 したがって、gcc に実装されている C99 仕様や gcc 拡張仕様を気がねすることなく利用することができます。 ここでは、便利な C99 仕様や gcc 拡張を紹介します。 配列の動的確保 (C99) 配列を定義するときに、動的にサイズを指定してメモリを確保することができます。 従来は、 int n = 100; char* buf = alloca(n); のように alloca を使っていたところを、 int n = 100; char buf[n]; と、言語仕様の範囲内で、より直観的に書けるようになりました。 case の範囲指定 (gcc 拡張) 従来、switch 〜 case で switch (n) { case 0: case 1: case 2: case 3: proc

    iPhone 開発に使える C99 仕様と gcc 拡張 - 2009-04-23 - Windchase
  • GraphvizでC関数のcallgraphを描く - @takuma104 log

    ちょっと必要だったので、gcc専用ですが、実行中のC関数が呼び出される様子(callgraph)をいろいろな組み合せてつくってみました。こんな図が描けます。(これはサンプルなので、実際のモノによってはもっと巨大な図が生成されます) 使い方 まずこの辺からダウンロードします。 http://github.com/takuma104/hacktools/tree/99ea8c9e71a4eae67f34f44f0054c466c78520ba/callgraph 実行には、GNU binutils が必要です。MacOSX で確認しているのですが、インストールされていないので、MacPort でインストールしました。 $ sudo port install binutils とかでいけます。あとは make してOKであれば*1 $ ./sample $ ruby trace2dot.rb s

    GraphvizでC関数のcallgraphを描く - @takuma104 log
  • 1