Python の distutils は .S (アセンブリ) をコンパイルできますか?
質問
私は、1 つのオプションの .S (アセンブラ) ファイルを含む小さな C ライブラリをバンドル、コンパイル、静的にリンクする小さな Python 拡張機能を作成しました。Distutils の Extension() は、デフォルトでは .S を認識しません。そのファイルをコンパイルする良い方法はありますか、それとも単にシェルアウトする必要がありますか? make
?現在、私は少し遅いライブラリに対してのみ C コードをコンパイルしています。
解決
どの程度新しいのかは分かりませんが、 Extension
クラスには extra_objects
引数でアセンブリファイルを指定できることがわかりました。たとえば、私の setup.py
次のようになります:
example_module = Extension('_example',
extra_compile_args = ['-Wall', '-g', '-std=c++11'],
sources=['something.cpp'],
extra_objects=['asm_amd64.s'])
再確認しましたが、生成されたライブラリを次のように検査すると、 nm -D example.so
, に含めると、アセンブリ関数は適切にアセンブルされ、リンクされます。 extra_objects
, ただし、その引数に含めないとリンクされません。それでうまくいくようです。
他のヒント
分散型として
、distutilsのは、アセンブリコードを知らない、と私はそれはそれで自動的に対処しましょう、それへの拡張を知りません。似たような状況で、私はいつも(必要に応じてCおよびアセンブリでかつ実現可能な)個別のライブラリを構築し、唯一のsetup.pyを有する得られ.a
を使用しました。
この程度開いている機能のリクエストがあります: http://bugs.python.org/issue2942する
所属していません StackOverflow