Python の distutils は .S (アセンブリ) をコンパイルできますか?

StackOverflow https://stackoverflow.com/questions/1664812

  •  12-09-2019
  •  | 
  •  

質問

私は、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する

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top