English / Japanese

c-wrapper - A Generic Wrapper for C Libraries

最終更新日: 2009年8月9日

c-wrapperとは

c-wrapperとはCやObjective-Cで書かれたライブラリを呼び出すためのFFI(Foregin Function Interface)です。 c-wrapperはヘッダファイルをパーズする機能を持っているため、関数、グローバル変数、定数に関する定義を行う必要がありません。

サンプルコード

c-wrapperを用いると以下のようなコードを書くことができます。

(use c-wrapper)

(c-load "stdio.h")

(printf "Hello, world\n")

MacOSXではObjective-Cのライブラリを呼び出すことも可能です。

(use objc-wrapper)

(c-load "Cocoa/Cocoa.h"
        :libs "-framework Foundation -framework Cocoa")

[[NSAutoreleasePool :alloc] :init]

(define s [[NSSpeechSynthesizer :alloc] :init])

[s :startSpeakingString (@ "Hello, world")]

(do () ((eq? [s :isSpeaking] NO)))

必要な環境

c-wrapperを動作させるためにはGauche 0.8.14以降の環境とGCCが必要です。なお、動作確認は以下の環境で行いました。

ダウンロード

インストール方法

インストールにはgauche-packageを利用する手順と、展開した後自分でconfigure & makeを行う手順があります。

gauche-packageを利用する場合

以下のコマンドを入力します。

% gauche-package install c-wrapper-0.6.0.tgz

自分でconfigure & makeを行う場合

以下のコマンドを入力します。なお、makeにはGNU makeを使用してください。

% tar zxvf c-wrapper-0.6.1.tgz
% cd c-wrapper-0.6.1
% ./configure
% make
% make install

cwcompileの使い方

cwcompileはヘッダファイルをパーズし共有ライブラリを作成するツールです。ランタイム時のヘッダファイルのパーズがなくなるため、起動時間が短縮できます。使い方は以下の通りです。

まず、ふつうにc-wrapperを使ったコードを作成します。

(define-module mymodule
  (use c-wrapper)
  (c-load '("stdio.h" "wand/magick_wand.h")
          :cppflags-cmd "Wand-config --cppflags"
          :ldflags-cmd "Wand-config --ldflags"
          :libs-cmd "Wand-config --libs"
          :compiled-lib "magicklib")
  (export-all))
...
(provide "mymodule")

このコードが動くことを確認した後、以下のコマンドを実行します。

% cwcompile mymodule.scm

ここで作成された magicklib.so をパス上に置いておくと、先のmymodule.scmをロードしたときに、ヘッダファイルをパーズするのではなく、この共有ライブラリがロードされるようになります。

cwcompileを使ったサンプルのムービーもあるので、参考にしてください。

制限事項

更新履歴

2009-8-9: バージョン0.6.1リリース
2009-6-27: バージョン0.6.0リリース
2009-2-21: バージョン0.5.6リリース
2009-2-14: バージョン0.5.5リリース
2008-5-11: バージョン0.5.4リリース
2007-5-21: バージョン0.5.2リリース
2007-1-6: バージョン0.5.1リリース
2006-12-26: バージョン0.5.0リリース
2006-08-25: バージョン0.4.4リリース
2006-08-20: バージョン0.4.3リリース
2006-08-06: バージョン0.4.2リリース
2006-07-24: バージョン0.4.1リリース
2006-06-11: バージョン0.4.0リリース
2006-04-30: バージョン0.3.4リリース
2006-04-15: バージョン0.3.3リリース
2006-04-02: バージョン0.3.2リリース
2006-03-25: バージョン0.3.1リリース
2006-03-19: バージョン0.3.0リリース
2006-03-12: バージョン0.2.0リリース
2006-03-04: バージョン0.1リリース


naoki at koguro dot net