リンカを100%使いこなそう!

(「Interface」2004/12〜 連載記事)

あなたは 人目のお客様です.

リンカに関する資料って,書籍も雑誌記事も Web も含めて, 今までほとんど無かったと思う.

リンカというと「Linkers & Loaders」がバイブルみたいに言われていて, 実際そうなのだけれど(ていうかこれしか無い),これは広く浅くの本なので, 細かい話がわからない.つまり,これを読んだだけではプログラムは書けない. 現場のプログラマからすると「もっと詳しい話が知りたいのだけど」ということに なってしまう. 「エキスパートCプログラミング」にもリンカの話があって, これもすごくためになる良書なのだけど,リンカの専門の本ではないので, やはりちょっと物足りないのと,いかんせん内容が古い.

以前 NetBSD の移植を手がけたことがあったのだけど,ぼくの場合, 一番苦労したのが,今思えばリンカ・ローダにまつわる部分だった. というのは,メモリマップというか,メモリがどのように使われているのかが わからないと,ブートストラップ部分は書けないからだ. このへんはリンカやローダの分野なのだけど,ところがこの分野って 大事なわりには書籍が全然無くて,理解するまで非常に苦労した. 当時はほとんど知識が無かったので,手探り状態だった.

そんなわけで書いてみた.気をつけたことは,

ということ.Linkers & Loaders はいい本だし, たぶんすごく実力のある(ていうかよく知っている)人が書いた本なのだけど, 上にも書いたように広く浅くなので,現場で使うとなるとやはり物足りない. なので,サンプルコードを多めにして,すぐに試せることを意識している.

まあおかげでプログラムリストばっかりの読みにくい記事になってしまって いるのだけど,プログラミングの記事ってどうしてもそうなってしまうものだし, まあしかたないかな,と思っている. (図が少ないのはいいことではないのだけど,だからといって必要ないのに無理に 図を入れるようなことは個人的にはキライなので,他人はともかく自分はやらない)

実践的に書くことは,ぼくが記事や本を書くときのポリシーなのだけど, やはり「すぐ試せる」「すぐ使える」ということは大事だと思う. 工学は人の役に立ってなんぼの技術なのだから, 「読んだはいいけど実践で役に立たない」じゃあ,やっぱしまずいと思う. だからぼくは「広く浅く一般的に」よりも「狭く深く具体的に」をモットーに書く.

いろんなことを広く浅く知っているよりも, ひとつのことを深く知っておけば,結局は他のこともだいたい想像できるわけなので, やっぱり一つのことを深く知っておくことは大事だと思う. それも,つぶしの聞かないようなことを極めるのでなく,王道というか, その道でスタンダードと呼べるようなものを極めておくべきだ. そうすれば他のことでも,たいていその応用でなんとかなるもんだ. 例えば GNU ld がどのように動作しているのかを知っていれば, 他のリンカについても,どんなふうに動作してるのか,だいたい想像がつくもんだ. (でもつぶしの聞かないような知識ではダメだけど)

この手の記事は,誰でも気軽に読むものではなく, ほんとに必要のあるひとだけがじっくり読むものなので, 「読みやすさ」とか「とっつきやすさ」よりは 「情報量」とか「書くべきことを書いているか」とかいったことのほうを 優先して書いている. なにしろいままでそういう資料がほとんど無かった(と坂井は思っている)のだから, まずは情報量を優先にすべきであって,読みやすくてとっつきやすい資料というのは, その後でいいわけだ. (だから,もしもこの記事を見て「読みにくい!もっと読みやすい資料がほしい!」 と思ったならば,思ったあなたがそういう読みやすい資料を書いてくださいな!)

ちなみにほとんど GNU binutils と gcc の話になっている. Windows の話は出てこない.というのは,坂井が Windows をほとんど知らないので 書けないというのが一番の理由なのだけど, やはりリンカとローダというのは「組込みで必要な知識」だと思うからだ. 組込みの世界では,製品版のコンパイラやリンカも多数あるとは思うが, やはり知名度,プラットホームの多さ,柔軟性,普及度などの点で, GNU の開発環境が事実上の標準だと思う.また GNU のツールは非常にシンプルで 王道なので,GNU のツールの動作が理解できれば,ほかもものも問題なく 理解できるだろうという考えもある.

今は組込みがはやりなので,こういうリンカとかローダの資料って, とても大切だと思うんだよね.日本が技術大国で生き残るためにも, こーいう資料を日本語でちゃんと書いて,社会に貢献しとかないとなあ, という思いもある.

英語の資料を読むのは大事なことだし,読めなきゃ話にならんのだけど, なんでもかんでも英語の資料しかないっつーのは,なんかちょっとまずいと思う. 海外ものにばかり頼るのでなく,やっぱし国産の良い資料がないとねえ.


メールは kozos(アットマーク)kozos.jp まで