.aファイルと.soファイル
ファイルフォーマット
両方ともライブラリに使われる
略語
.a: Archive
.so: Shared Object
おさらい
どうプログラムは動くのか?
i.e. OSはどのようにして「実行ファイル」を実行するのか?
おおまかに言うと
1. メモリにそのまま実行ファイルがロードされる
2. 必要に応じて動的リンクされたライブラリが解決される
3. 所定の位置からCPUが動き始める
こうして「実行可能ファイル」は「プロセス」に変貌する
機械語
CPUくんが解釈できるコード
これだけだと命令を並べたコード片にすぎない
ただCPUが動いてレジスタとメモリに値が入るだけ
オブジェクトコード
機械語に種々のメタデータをつけたもの
変数の初期値、この関数がどこから始まるのか、hogehogeという関数はどこにあるか、などが記述される
最近のLinuxではELFというフォーマットでオブジェクトファイルが作られる
そもそもライブラリとは?
プログラムを再利用可能な単位で分割するための機構
その結果として、あるプログラムから別のプログラムを呼べる
ライブラリの態様
ダイナミックリンクライブラリ
実行ファイルを実行するときに、OSに見付けてもらって動的(ダイナミック)にメモリにロードされて使われる方式
スタティックリンクライブラリ
実行ファイルを作る(リンク)するときに、最終的なファイルに全部合体させてしまう方式