python
を使用してソースコードfoo.pyをCにコンパイルしようとしていますcython
。
でfoo.py
:
print "Hello World"
私が実行しているコマンドはですcython foo.py
。
問題は、を使用してfoo.cをコンパイルするgcc
と、次のエラーが発生することです。
undefined reference to 'main'
。
(Cython を使用して) Python から C にコードを変換すると、共有オブジェクトにコンパイルできる C コードに変換されます。実行可能にするには、cython 変換コマンドに「--embed」を追加する必要があります。このフラグは必要な「メイン」関数を追加するため、c コードを実行可能ファイルにコンパイルできます。.so
exec を実行するには、python ランタイム ライブラリが必要になることに注意してください。
Cython のドキュメントを読んでください。これにより、(うまくいけば) Cython とは何か、そうでないものもわかります。Cython は、共有オブジェクト/dll である Python 拡張機能 (汎用の Python-to-C コンパイラーではない) を作成するためのものです。main
動的に読み込まれるライブラリには、スタンドアロン プログラムのような機能はありませんが、コンパイラは最終的に実行可能ファイルをリンクしていると想定します。それ以外の場合は、フラグを介して伝える必要があります ( -shared
methinks ですが、Cython のドキュメントを参照してください)。さらに良いのは、自分でコンパイルせずに a を使用することsetup.py
です (もう一度、Cython のドキュメントを読んでください)。
通常の方法は、distutils を使用して cython で生成されたファイルをコンパイルすることです。これにより、移植可能な方法で必要なすべてのインクルード ディレクトリも提供されます。