Saturday, April 21, 2007

libpasori の共有ライブラリ化

libpasori 共有ライブラリ化なんて、gcc のオプションをちょこっと変更してあげればOKでしょ?くらいに思っていたんだけど、何だか Mac の gcc はちょっと勝手が違うらしい。

Using static and shared libraries across platforms

共有ライブラリの拡張子も libhoge.so じゃなくて libhoge.dylib なんだそうだ。いままで気が付かなかった。gcc のオプションいろいろ試してみるがなかなかうまくいかない。もういいやと諦めかけたころ、ふと Xcode の存在を思いだした。Mac Switch 歴 10ヶ月、いままで全く使ったことは無かったし必要も無かったけれども、これを機会に試してみよう。

MacPorts を使うため Developer Tools は導入済み。

Xcode を起動し、ファイル -> 新規プロジェクト... を選択。

それらしいプロジェクト発見!

こんな画面が開きます。

libpasori のソースコードを追加しましょう。

左ペイン「グループとファイル」にある、Source を右クリック -> 追加 -> 既存のファイル... を選択します。

以下のファイルを選択し、追加します。

ディスティネーショングループのフォルダに項目をコピーするをチェックします。

こんな感じになります。

プロジェクト -> プロジェクト情報を編集 -> ビルド にてビルド設定できるようです。

何を設定すべきかは、libpasori 添付のビルドスクリプトを参考にしましょう。

buildline-libusb.sh
#!/bin/sh
gcc -o lpdump `libusb-config --cflags` -D__LIBPASORI_WITH_LIBUSB lptest.c libpasori_command.c libpasori_com_libusb.c libpasori_polling.c `libusb-config --libs`

バッククォートの部分を実行してみます。

% libusb-config --cflags
-I/opt/local/include
% libusb-config --libs
-L/opt/local/lib -lusb -Wl,-framework -Wl,IOKit -Wl,-framework -Wl,CoreFoundation -Wl,-prebind

これらを参考にして、以下のように設定します。

必要ライブラリ・フレームワークを追加します。

プロジェクト(pasori) を右クリック -> 追加 -> 既存のファイル... から以下のファイルを追加します。

/opt/local/lib/libusb.dylib

プロジェクト(pasori) を右クリック -> 追加 -> 既存フレームワーク... から以下のフレームワークを追加します。

/System/Library/Frameworks/IOKit.framework
/System/Library/Frameworks/CoreFoundation.framework

すると、こうなります。

それではビルドしてみましょう。金槌アイコンクリックです。

無事完成したようです。

これで Ruby から libpasori を利用する準備は完了です。

関連URL