blog.monophile.net

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、情報科学芸術大学院大学[IAMAS]においてメディア表現を専攻し修了。 現在は digitiminimi Inc. において、インフラエンジニアとして生計をたててている。 また、計算を主題に制作を行い、現代音楽作品や公共インスタレーション作品など技術提供を行う。 三輪眞弘に師事する。

List

Cythonでコンパイル

abstract

pythonをcython経由でネイティブコンパイルします。

install

$ sudo apt-get install cython

test

code

pythonのコードを書きます。 hello.pyとして以下を保存します。

if __name__ == '__main__':
    print "hello"

hello.py -> hello.c

$ cython hello.py

gcc

$ gcc hello.c

するとエラーが出ます。

test.c:4:20: fatal error: Python.h: No such file or directory
compilation terminated.

Python.hが見つからないそうです。

解決策

python-devをインストールします。

$ sudo apt-get install python-dev

もう一度、コンパイル

$ gcc -I/usr/include/python2.7 hello.c -lpython2.7

しかし、まだエラーが出ます。

/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status

“main”がないと書かれています。

hello.py -> hello.c

$ cython --embed hello.py

gcc

$ gcc -I/usr/include/python2.7 hello.c -lpython2.7

これで無事にa.outができました。

execution

$ ./a.out

結果として“hello”が出力されます。

hello

参考URL