さくらでSWIG

1 月 5th, 2008 in C, PECL, PHP, Sakura users

PHPのエクステンションをPecl_Codegenで書くのもいいけど,めんどくさくなってきた.
よくCのライブラリにはPython用のインターフェイスが用意されていたりするが,どうもあれはSWIGというソフトでCから自動生成しているみたい.
みてみるとPHPでも使えるみたいなのでやってみた.

SWIGインストール

いつものやつ

wget http://prdownloads.sourceforge.net/swig/swig-1.3.33.tar.gz
tar xzvf swig-1.3.33.tar.gz
cd swig-1.3.33
./configure --prefix=$HOME/usr
make
make install

Example

公式サイトにのってるやつ

example.c

#include <time .h>
double My_variable = 3.0;
 
int fact(int n) {
  if (n < = 1) return 1;
  else return n*fact(n-1);
}
 
int my_mod(int x, int y) {
  return (x%y);
}
 
char *get_time()
{
  time_t ltime;
  time(&ltime);
  return ctime(&ltime);
}

example.i

 /* example.i */
 %module example
 %{
 /* Put header files here or function declarations like below */
 extern double My_variable;
 extern int fact(int n);
 extern int my_mod(int x, int y);
 extern char *get_time();
 %}
 
 extern double My_variable;
 extern int fact(int n);
 extern int my_mod(int x, int y);
 extern char *get_time();

PHPラッパー生成

今回はPHP5用.PHP4もある

swig -php5 example.i
gcc -c example.c example_wrap.c `php-config --includes` -fPIC
gcc -shared example_wrap.o example.o -o example.so
mv example.so `php-config --extension-dir`
php -r 'dl("example.so"); var_dump(My_variable_get(), fact(5), my_mod(7, 3), get_time());'

結果は

float(3)
int(120)
int(1)
string(25) "Sat Jan  5 02:14:31 2008
"

できたーー!
PHP用は機能がイマイチらしいのでちょっと使ってみてどんなもんか調べてみます!

参考リンク

One Response to “さくらでSWIG”

  1. luki sportowe より:

    You write awsome article, bookmarked

Leave a Reply

Recent Posts

よく考えたらこれでいいじゃん http://bit.ly/bsxqE0 MapperとReducer別々にしないとReflection走るな RT @making: multimethodでたくさん書くのが面倒だからこんなマクロ作った http://bit.ly/bsxqE0
* 10年03月11日03時09分

@junkawamoto うお、おれ明日源泉徴収票届く予定w
* 10年03月11日01時55分

@ryushi スプライシングクオートは楽して大量にS式を自動生成したいときに結構使います。よく入力をmapでごにょごにょ加工して~@したり。 単純な例だとこんなことができます http://gist.github.com/328042
* 10年03月11日01時48分

» Twitter

Search

ドミノ・ピザ 5%OFF!

デル株式会社

 iTunes Store(Japan)

 iTunes Store(Japan)

Sony Style(ソニースタイル)

ツートップインターネットショップ(twotop.co.jp)

Recommend

アルゴリズムC++
アルゴリズムC++
¥ 7,980(新品) /¥ 5,100(中古)
データ構造・アルゴリズムの基礎に関して
一通り網羅されている.
一冊机の上に置いておきたい.
C++で書かれているのも珍しい
(古いC++だけど..)

view all

Categories

Tags