blog.monophile.net

コンピュータのこととかのメモ。

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、 情報科学芸術大学院大学[IAMAS] においてメディア表現を専攻し修了。 現在は digitiminimi Inc. において、インフラエンジニアとして生計をたててている。

work

各種システム構築と管理を承ります。

Cloud PlatformOpenstack, GCP, AWS, Azure, ...
Openstackkeystone, glance, cinder, swift, neutron, nova, ...
VirtualizationQEMU+KVM, LXD/LXC, Docker, ...
OSDebian GNU/Linux, Ubuntu, CentOS, ...
NetworksIPSec, L2TP, VXLAN, WirelessAP, ...
WebAppsWordPress, GitLab, Redmine, ...
Configuration ManagementAnsible, Terraform, ...
MonitoringNagios, Munin, ...

posts

Cythonでコンパイル

概要

pythonをcython経由でネイティブコンパイルしてみる。

install

$ sudo apt-get install cython

hello.py

hello.pyとして以下を保存する。

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

hello.py -> hello.c -> a.out

$ cython hello.py
$ 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 -> a.out

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

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

実行

$ ./a.out

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

hello

めでたし、めでたし。

参考