コンパイルオプション
オプション | 意味 |
---|---|
-I | ヘッダファイルの検索ディレクトリを追加 |
-L | リンカの検索ディレクトリを追加 |
-l | リンカでライブラリファイルをリンクする |
gcc -L./ -lhoge
./フォルダをライブラリ検索パスに追加し、hogeライブラリをリンクする
Make自動変数
変数 | 意味 |
---|---|
$@ | ターゲットのファイル名 |
$< | 最初の依存関係の名前 |
$^ | 全依存関係の名前を空白で挟んで並べたもの |
標準Cライブラリ
標準C++ライブラリ
libstdc++が元々gccで使われていた。
ver4.2.1以降、GPL3になったことによりgcc以外のコンパイラでlibstdc++を使うとGPL適応になった。
それは不便だということでlibc++が作られた。
参照
c++ - When is it necessary to use use the flag -stdlib=libstdc++? - Stack Overflow
コンパイルとリンクについて
- コンパイラは人間が理解できるソースコードから、機械が理解できるオブジェクトファイルを作る
- オブジェクトファイルの中身は以下で構成される
- コード: 関数の定義
- データ: グローバル変数の定義
- 宣言とは、ソースのどこかにその定義がある、ということをコンパイラに伝えることである. 実際にその通りかどうか確認する(空いてるところに埋める)のはリンカの役目である
オブジェクトファイル
$ nm main.o
でオブジェクトファイルを調べる
大文字がグローバル
小文字がローカル
- U: 未定義
- D: 初期化されたデータセクション(.data)
- B: 初期化されてないデータセクション(.bss)
- T: 普通の定義
スタティックライブラリは未定義のシンボルだけを取り込む
ダイナミックライブラリは全部取り込む