忍者ブログ

EDA Blog

Verilog、SystemVerilog、SystemCなど、ハードウェア記述言語についてのブログです。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

[SWIG] SWIGの導入

モダンPerl入門の第8章を読みましたが、XS言語を使って本格的にC言語とPerlの連携をするのは敷居が高そうです。

代わりに、簡単にスクリプト言語とC言語の連携をするツールのSWIG (Simplified Wrapper and Interface Generator)をインストールしてみました。
Perlだけではなく、Tclなどの他のスクリプト言語とも連携可能です。

マニュアルを読んでいますが、使い方は簡単です。
下記のC言語のコードexample.cをTclからアクセスしたいとします。
int fact(int n) {
if (n <= 1) return 1;
else return n*fact(n-1);
}

int my_mod(int n, int m) {
return (n %m);
}


SWIGに入力するファイルexample.iを作成します。
%module example
%{

%}

extern int fact(int);
extern int my_mod(int n, int m);


下記コマンドでラッパーファイルexample_wrap.cを作成します。
swig -tcl example.i


example.cexample_wrap.cをコンパイルして、example.dllを作成します。
gcc example.c example_wrap.c -shared -ltcl -o example.dll


loadコマンドでexample.dllを読み込めば、example.cで定義された関数factmy_modが呼び出せます。
$tclsh
% load example.dll
%fact 5
120
% my_mod 10 3
1
%


同じコードをPerlから呼び出すには、swigコマンド実行時のオプションを変えます。
swig -perl example.i


gccでコンパイルしてDLLファイルを作成するのも同じです。
Perlのディレクトリ名は環境に合わせて変更する必要があります。
gcc example.c example_wrap.c -shared -I/usr/lib/perl5/5.10/i686-cygwin/CORE \
-L/usr/lib/perl5/5.10/i6868-cygwin/CORE -lperl -o example.dll


PerlコードからはuseコマンドでDLLを読み込めば関数を呼び出せます。
#! /usr/bin/perl -w
use strict;
use example;

print example::fact(5), "\n";
print example::my_mod(10, 3), "\n";

拍手[0回]

PR

カレンダー

03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

フリーエリア

最新CM

[04/11 なつたん]

最新TB

プロフィール

HN:
aston_martin
性別:
非公開

ブログ内検索

カウンター

アクセス解析