bmp画像はなにかと容量を食うのでなんとかしたい、代わりにJPEG画像を利用できれば...
と思ったとします。しかし残念ながらAllegro にはまだJPEG画像を読み込む関数がありません、
そこで様々な人がAllegro に機能を追加するための拡張ライブラリを公開しています。
たとえば、JPEG画像を読み込ませるためのライブラリjpgalleg-2.5 がそうです。
今回はこのライブラリを MaxOS X と Xcodeから使ってみようと思います。
◆Enhansed Creations ++
http://www.ecplusplus.com/index.php?page=home
このサイトの Downloads からjpgalleg-2.5.tar.gz をダウンロードします。
展開すると jpgalleg-2.5 というディレクトリができます。
ターミナルを使って、以下のようにコマンドするとインストールできます。
cd jpgalleg-2.5
./fix.sh macosx
make STATICLINK=1
sudo make install
STATICLINK=1 というのは、静的リンクを有効にするという設定。
実行ファイル内にライブラリをまとめられるので、
プログラムを配布した場合に、他の人の環境で実行する場合でも、
Allegroやjpgallegライブラリを探してインストールする必要がなくなります。
静的(Static )ライブラリ;(コンパイル時にライブラリとappが一緒になる。 )
静的リンクによりプログラム内にライブラリを結合して使う方法。
gcc等でコンパイルされた obj ファイル xxx.oを 'ar' コマンドで lbxxx.a にアーカイブして作成する。
動的(Dynamic)ライブラリ:(ライブラリ と app が別々 )
動的リンクによりプログラムが必要に応じて他の場所にあるライブラリを呼び出す方法。
共有(Shared)ライブラリ:Windows の DLL等
色々なプログラムが共通して使える機能を提供する汎用のライブラリ。
参考URL
http://e-words.jp/,http://yougo.ascii24.com/
http://www.linux.or.jp/JF/JFdocs/Program-Library-HOWTO/index.html
インストールが終わったので、今度は このライブラリを組み込んで、
Xcode からビルドして、うまく動作するか確かめる必要があります。
jpgalleg の example ディレクトリには、サンプルプログラムが
収録されているので、それを試してみることにします。
ex1.c というサンプルプログラムは pgalleg.jpg という JPEG画像ファイルを読み込むというものです。
まずは、 Xcode で新規allegro プロジェクトを作成して、ひな形プログラムを作ります。
ex1.c をテキストエディタで開いて全文をコピーし、Xcode の main.c の内容へペーストして置き換えます。
#include
によってこのライブラリを使う事ができます。
次に、プロジェクトの ある ディレクトリ内の build ディレクトリに、
jpgalleg.jpg をコピーしておきます。(そこに置いとくとアプリが画像を読込めます。)
しかし、これで 「ビルドと実行」を行おうとすると。
コンパイル時に「Undefined symbols」というエラーが表示され失敗してしまいます。
このエラーメッセージは、ライブラリとのリンクがうまくいってないのが原因らしいです。
jpgalleg の Readme.txt の
Using JPGalleg の 項 を読むと、 「-ljpgal」オプションを追加せよと書いてあります。
gcc myprog.c -o myprog.exe -lalleg -ljpgal
コマンドラインから gcc を使ってコンパイルするなら上のコマンドを使えばいいですが
Xcodeでは勝手が違います。この情報をもとにXcodeで同じように設定することにします。
Xcode で同じようにするには、先ほどのサンプルプログラムの 左ペインの「グループとファイル」 ツリーの
ターゲット>[ターゲット名]を選択。そしてターゲット の 設定>シンプルビュー>「リンカ設定」 を選択。
リンカ設定の「その他の Mach-O リンカフラグ」という欄を探してください。
-L/usr/local/lib -lalleg-main となってますが、 それに、「-ljpgal」 を追加します。
これでリンクされました。それでもう一回ビルドしてみるとコンパイルが成功すると思います。
このデモはフルスクリーン画面でJPG画像がロードされ、ESCキーを押すと終了します。