【コラム】
新製品ではないのだが、つい先日M-AUDIOのUSBオーディオ「sonica」を購入した。そこにオーディオテクニカの「ATH-A500」というヘッドホンを繋いで利用しているのだが、解像度が高いというかダイナミックレンジが広いというか、G4 Cubeに同梱されていたApple Pro Speakerのヘッドホン端子とは大違い。もっと早く買っておけばよかった……。
さて、今回は「configure」について。当コラムでも、アプリケーションのインストール手順を紹介するときに必ずと言っていいほど登場するスクリプトだが、具体的に説明をしないまま今日に至ってしまった。その反省の意味も込めて、高性能なMP3エンコーダとして著名な「LAME」を例に、その役割と少し高度な利用方法について説明してみよう。
ご存知のとおり、UNIX系OSを対象としたアプリケーションは「ソース」の形式で配布されることが一般的だ。通常、ソースは多数のファイルによって構成されるため、リンクさせるべきライブラリなどコンパイルに必要な情報は「Makefile」というファイルに記述しておき、コンパイル時に支援ツールの「make」に参照させるようにする。ソースが"料理の素材"だとすれば、gccやmakeなどのツールは"包丁やフライパン"、Makefileは"レシピ"にたとえられるだろう。
しかし、大規模なプログラムともなると、内部にライブラリなど複数の(ある程度独立した)プログラムを抱えることが多く、それに応じて必要なMakefileが増える。将来のバージョンアップを考えると、それぞれのOS専用のMakefileを用意するわけにも行かないため、GNU autoconfやGNU automakeといったユーティリティを利用し、Makefileを自動作成するためのツールをソースコードに添付することがお約束となっている。
そのツールが「configure」なのだ。configureを実行することにより、使用されるべきコンパイラ、コンパイラに与えるオプション、リンクすべきライブラリ……その他諸々の情報が自動的に収集され、環境に応じたMakefileが作成される。先ほどの比喩に従えば、"レシピ自動生成装置"とでも言えるだろうか。
configureの実行時には「./」を先頭に付けるが、これはカレントディレクトリにある(実行形式の)ファイルを実行するためのもの。configureの1行目には必ず「#! /bin/sh」という文字列が記載されているため、これでシェルスクリプトとして機能する仕組みだ。「sh configure」としても同じだが、「./」のほうがスマートだろう。
configureが作成されるときには、開発者が用意した"レシピの設計書"に相当するファイル(Makefile.in、configure.in)に従い、多数のオプションが設定される。オプションの数や種類はアプリケーションによって異なるうえ、書式に厳格な定めはないが、ある機能を有効にするときは「--with-**」または「--enable-**」を、無効にするときは「--without-**」または「--disable-**」を接頭語に使うことが一般的だ。どのようなオプションが用意されているかは、以下のように「--help」を指定すれば確認できる。
「--with-**」や「--without-**」以外にも、configureはシェル変数や環境変数の値を参照してMakefileに反映する。たとえば、Cコンパイラであるgccは「CFLAGS」という変数を参照するが、configureの実行時に「CFLAGS=-O3」などとしてオプションを指定すれば、最適化の度合いを調整できるのだ。一般的には適度な最適化を行う「-O2」がデフォルトの設定として用いられるが、場合によっては「-O3」にするとバイナリの処理速度がアップすることもあるため、少しでも速度を稼ぎたいときには有効な手法と言える。
それでは、MP3エンコーダの「LAME」を例にその手順を説明してみよう。LAME v3.96の場合、オプションを付けずにconfigureを実行すると、OS Xデフォルトの設定(CFLAGS = -O3 -ffast-math -funroll-loops -Wall -fno-common)が適用されるが、以下の要領でOS X版gcc 3.3独自のオプション「-fast」を指定すると、「-O3」を超える最適化が行われる(共有ライブラリを作成するときには「-fPIC」を指定する必要あり)。実際、エンコード速度にも効果が現れているようなので、これからLAMEを導入するときにはお試しいただきたい。
最適化オプション別のLAME v3.96のエンコード速度
| 最適化オプション | 意味 | 時間 | Play/CPU |
|---|---|---|---|
| -O0 | 最適化なし | 191秒 | 1.6032x |
| -O2 | 適度な最適化 | 69秒 | 4.5155x |
| なし(-O3) | 標準の設定 | 67秒 | 4.6582x |
| -mcpu=7450 -fast -fPIC | Mac OS X独自の最適化 | 63秒 | 4.9416x |
| レノボ・ジャパン、ウェブ広告モデルを一般公募 - 新生活キャンペーンの一環で [21:21 2/10] |
| 【レポート】スマートフォンを狙ったワンクリック詐欺やオンラインバンキングを狙うゼットボット - トレンドマイクロマンスリーレポート [20:43 2/10] |
| 【レポート】レノボ、大和研究所の開発陣らによる「ThinkPad X1 Hybrid」の技術解説 [20:41 2/10] |
| デル、「冬モデルファイナルセール」最終週 - 各種アップグレードが無料 [20:13 2/10] |
| Appleが3月初旬にスペシャルイベント開催の噂 - iPad 3の発表か [18:34 2/10] |
|
激シブ!もう一度ゴルフ Ⅱ の魅力を味わってみませんか?【大阪オートメッセ2012】 [03:06 2/11] キャリア |
|
『ヘタリア』キャラソン、新シリーズが配信決定! [03:05 2/11] キャリア |
|
全国の温泉を擬人化したドラマCD、第1弾「草津」は櫻井孝宏さん! [03:05 2/11] キャリア |
|
柿原徹也さんの2ndミニアルバム「CONTINUOUS」2月15日発売 [03:04 2/11] キャリア |
|
アニメ「Fate/Zero」陣営ごとのお守りが発売決定 [03:03 2/11] キャリア |