KUMICO

COLUMN

組み込みエンジニアの戸惑い PythonからC言語を呼び出してみる②(SWIGを使った場合)

組み込みソフトウェアエンジニアがPythonを始めてみました。そして、第6の戸惑い、前回に引き続き組み込みとは切っても切り離せない「C言語」に関しての話題です。Pythonを扱っていて課題となることもある処理速度の改善や、過去資産の流用など、そんなときに役立つかもしれない、PythonからC言語を呼び出す方法についてのご紹介です。

PythonからC言語、またはC++を呼び出す方法には様々なものがあり、前回の記事でご紹介したPython/C API (Python.h)や、今回ご紹介するSWIG、またboost.pythonなどがあります。 それでは、早速SWIGの使い方や簡単な仕組みなどをご紹介していきたいと思います。

SWIG
SWIGは「Simplified Wrapper Interface Generator」の略で、その名の通りC言語やC++で書かれたコードとPythonのコードを繋ぐラッパーを作成するツールで、使用する際には自身の環境にSWIGをインストールする必要があります。

他のC言語を呼び出す方法との違いは?
C/C++の内容に合わせたインターフェースファイル(.i)を用意し、SWIGを実行するだけでラッパーファイルが作成されます。インターフェースファイルはPython/C APIを使用する際に作成するラッパーよりも簡単に記述ができ、SWIGがラッパーを作成してくれるのでPython/C APIよりも規模の大きなモジュールを作成する際などは、効率的にC/C++をPythonで使用することができます。

仕組み
SWIGを使用して、ビルドから実行までの流れを確認しておきましょう。

1

まず初めに、元となるC/C++のファイル(.c/cpp)に合わせてインターフェースファイル(.i)を作成し、SWIGに掛けることでラッパーファイル(.c/cpp)を作成します。次に、元となるC/C++のファイル(.c/cpp)と、SWIGで作成したラッパーファイル(.c/.cpp)をビルドします。ビルドして出来上がった共有ライブラリファイル(.so)をC/C++を呼び出したいPythonのコード上でインポートし、対象となる関数を呼ぶだけです。

C/C++ファイルの例
Pythonから呼び出したいC言語のファイルを作成します。

what.c

#include <stdio.h>

void doYouDo( const char* jobs ){
printf( “Hello, I am %s.\n”, jobs );
}

インターフェースファイルの例
Cファイルに合わせたインターフェースファイルを作成します。

what.i

%module what
%{
#include “stdio.h”
%}

extern void doYouDo (const char* jobs);

ビルドする
作成したC/C++ファイルとラッパーファイルをビルドします。

SWIG -python what.i
gcc -fPIC -Wall -c -o what.o what.c
gcc -fPIC -Wall -c -o what_wrap.o what_wrap.c
gcc -fPIC -Wall -shared -o whatModule.so what.o what_wrap.o

Pythonから呼び出す
準備は整ったので、最後にPythonから作成したC言語を呼び出してみましょう。

>>> import what
>>> what.doYouDo( ‘an embedded engineer’ )
Hello, I am an embedded engineer.

前回ご紹介したPython/C API (Python.h)よりもかなり簡単にC言語を呼び出すことができています。これなら様々な開発に使えるのでは?と感じるところもありますが、やはりそうは行かない部分もあり、複雑なコードになるとインターフェースファイルにも工夫が必要な場面も出てきます。ご興味がある方はSWIGのサイト(http://www.swig.org/Doc4.0/SWIGDocumentation.html)をご覧ください。そのため、他にも様々なC言語・C++をPythonで扱う方法が存在しますので、また機会をあらためてご紹介できたらと思います。

個別相談も承っております。下記よりお申し込みください。

個別相談会申し込み

シリーズ記事

関連記事

OTHER COLUMN

MORE  

まこちゃんブログ

NEWS

MORE  

PARTNER

  • Intel
  • Xilinx

お探しの組み込み製品はキーワードで検索!