記事のページ

Mac OS X と コンパイル

MacPorts.jpg
 UNIX互換の OS は、Kernel(カーネル)上に、いろいろなモジュールを組み込んでさまざまな機能を実現しているのだが、特に、いろいろなプログラムから利用できるように部品化してひとかたまりになっているモジュールを"ライブラリ"と呼んでいる。Mac OS X にも最初からさまざまな "オープンソースのライブラリ" が搭載されているのだが、一度は目を通されておくと良いと思う。
FINK.jpg
 ところで、Mac OS X に、我々の必要な"ライブラリ"がすべてインストールされていれば問題はないのだが、実際にはそういうわけでもない。不足している UNIX互換の "ライブラリ" を、自分でインストールしなければならないことも生じてくるわけだ。
 ライブラリには、特定のソフトウェアに組み込まれた形で使われる「.a」という拡張子を持った"静的(static)ライブラリ"や、 複数のプログラムから利用される汎用性の高い「.so.(バージョン番号)」という拡張子を持った"共有(shared)ライブラリ"などがある。
 このような"ライブラリ"を含む、UNIX互換のプログラムをインストールしていく場合には、プログラミング言語を使って作成されたソースコード(ソースコードは人間、特に、英米人なら理解できるテキストファイルでできている)を、コンピュータが理解できる機械語(バイナリコード、要するに"0"と"1"の羅列で普通の人間なら意味不明のはず)に、まずは変換(コンパイル)しなければならない。ちなみにバイナリコードは 「.o」という拡張子を持っている。
 ソースコードからインストールするには『設計(configure)し、インストール可能な形に整形(make)したのち、インストール(make install)する』という手順をふむのが普通だが、"configure および make" までが "コンパイル"にあたる。前の記事で話をしたように、UNIX互換の OS には多くの種類があり、インストールされるハードウェアもさまざまである。その組み合わせに応じて適切にコンパイルするために、今までにたくさんの開発者が苦労しながらコンパイルするための手順やらプログラムを作り上げてきたのである。
 そして、コンパイルを行うために用いられるプログラムも当然存在するわけだが、このプログラムはコンパイラと呼ばれている。Linux やその他の UNIX 系システムで使われている、最も有名でフリーなコンパイラが GCC (the GNU Compiler Collection) と呼ばれる GNU のコンパイラ群である。Mac OS X においても Xcode をインストールすると GCC が組み込まれるようになっている。
 さて、"configure" とは、コンパイルに必要な"ヘッダファイル"や"ライブラリ"、そして"システムコール"や"関数"の存在を調べて、それらの情報をもとに"makefile"という設計図を自動的に作成する手順のことである。インストールする環境に合わせて設計図(makefile)を正確に作成することが、なによりも重要である。環境に合わせて"configure" する際に、いわば手動でオプションを指定する必要がある場合もある。Mac OSX の場合は独自仕様になっている部分も多いため、オプションを指定する必要があることが多い。
 そして、それぞれの環境にあわせて作られた設計図である"makefile"をもとに"make"をすると、自動的に機械語(バイナリコード)に変換されることになる。バイナリコードに変換することは、ビルド(build)ともいう。
 また、プログラムによっては、インストール先の環境にあわせてあらかじめ "makefile" が用意されていて "configure" をしなくてもよいものもある。自分の環境にあった"makefile"を選択して、いきなり"make"すればコンパイルが完了することになる。また、"perl"のように「GNUプロジェクト」の"configure"とは違う独自のシェルスクリプトを用意して"makefile"を作成するものもある。
 "configure"および "make"プログラムにおいて、ほぼ自動でコンパイルができるのは、「GNUプロジェクト」の autoconf および automake というプログラムがあるからで、これを使用することで開発者はより簡単に "configure" および "make"プログラムを作成することができるようになっている。また、"静的(static)ライブラリ" や "共有(shared)ライブラリ" 等のインストールについては頭の痛い問題が多いのだが、インストール先の環境とインストールされるソースコードとの間に入って、統一的なインターフェースでコンパイルできるように仲立ちをする GNU の libtool というプログラムも存在する。これらの「どこでもビルド、実行できるパッケージ作成を支援すること」を目的に作られた autoconf、automake、libtool に代表されるツール群を GNU Autotools と呼んでいる。どんな環境においても自動的にコンパイルできれば理想的で、いろいろな試行錯誤から GNU の libtool 等が生まれてきているわけだが、実際にはこれらを組み合わせて使い、不足する部分については手作業で手直しをしてコンパイルをしているのが現状である。このあたりの事情を詳しく知ろうと思ったら、
しかない。しかも訳書である。筆者も読んだが何を書いてあるのか理解不能の部分もあり、まだ途中で放り投げてある。
 ここまで我慢して読んできた読者の中には面倒くさくてイヤになってきた方もおられるだろう。イヤになっているのは貴方だけではない。開発している側も充分わかっている。したがって、それぞれの OS の環境に合わせてあらかじめパッケージを作っておき、自動的にインストールできるようにする方向の開発もさかんに進められている。Debian GNU/Linux を見ていただきたいのだが、本家本元でも、手軽にインストールができるように膨大な数のコンパイル済ソフトウェアがパッケージとして付属している。現在人気の Fedora でも、"rpm"コマンドを使ってインストールや管理が簡単におこなえる"rpmパッケージ"が開発されていて、一般のユーザーは難しいことを考えなくてもパッケージの利用が可能になってきている。実はパッケージになっていないものをインストールするような場合以外、コンパイルが自分でできなくたってゼーンゼン構わないのである。
 Mac OSX についてもいろいろなソフトウェアを簡単にインストールするためのプロジェクトがいくつか存在する。MacPorts は Mac OS X 上で利用可能なパッケージシステムの一つで、OpenDarwin プロジェクトの一部として 2002 年より始められ、アップルの従業員も多数参加している。以前は DarwinPorts と呼ばれていたもので、 FreeBSD の Ports というパッケージ管理のシステムと同様のシステムである。もうひとつの大御所が、 Debian GNU/Linuxプロジェクトで使われている apt-get というパッケージ管理ツールと同様のシステムを使う Fink である。Mac OS X で使うことができるパッケージシステムのなかでは利用者も多いからご存知の方も多いと思われる。この2つが Mac OSX で使うことができるパッケージシステムの両横綱である。
 よっしゃー、わかった、両方とも使おう!とは考えない方がよい。両方ともにいろいろな事情からパッケージの管理が独特なので、両方を使用する場合には上級者以外では収拾のつかない状態に陥る可能性がある。例えば MacPorts の場合では、/opt という特別なディレクトリにインストールされるようになっているし、Fink も Mac OS X オリジナル部分に影響がでないように、独自の場所(/sw)にインストールが構成される。お使いになる場合には、いろいろとお調べになったうえで、ということになるであろう。ただし、はっきり理解をしておいていただきたいのだが、Mac OS X オリジナル部分に影響がでないように、独自の場所にインストールされるということは、開発環境としては都合がいいことかもしれないが、Mac OS X server で実際にサーバを動かすといった目的には必ずしも都合の良いこととはいえない。Mac OS X server でサーバを動かす場合、不足する部分についてはアップルのアップデートを待つか、自分で組み込むにしても最小限にとどめておく方がよい。Mac OS X server が予定している場所にインストールされなければいろいろな不都合があるからである。

 ディレッタントを自認する筆者のお気楽なブログで、あえてパッケージを使わずに開発環境を整えていくことを目的に書いているから、Mac OSX で使うことができるパッケージシステムについてはまた改めてお話をしていければと思っている。

この記事について

この記事は著者が2007年9月18日に書いたものです。

コメントおよびツッコミ大歓迎です。
すべてのコメントに目をとおさせていただいておりますが、そのうちのいくつかを選んで公開しておりますので、ご了承いただけたら幸いです。

この記事は "マックの道具箱" カテゴリ内の記事です。

カテゴリ内の前の記事は
Mac OS X と UNIX」です。

カテゴリ内の次の記事は
Mac OS X 10.5 と Apache」です。

最近の記事はメインページで見られます。過去に書かれた記事はアーカイブで見られます。著者自身の撮影した写真は、写真集でご覧になれます。

Made on a Mac