setup.py がデフォルトで使用するコンパイラ (GCC) フラグをオーバーライドするにはどうすればよいですか? 質問する

setup.py がデフォルトで使用するコンパイラ (GCC) フラグをオーバーライドするにはどうすればよいですか? 質問する

setup.pyPythonをビルドするのに使われたものと同じものを使用していることは理解していますCFLAGS。私たちのC拡張機能の1つがセグメンテーション違反を起こしています。それをビルドする必要がありますそれなし -O2一部の値とコードが最適化されているため-O2、コア ファイルだけでは問題を特定できないためです。

使用されないsetup.pyように変更するだけです。-O2

ドキュメントを読んで、distutils特にフラグとライブラリとインクルードを追加する方法はわかりましたが、デフォルトの GCC フラグを変更する方法はわかりません。distutils.ccompilerdistutils.unixccompiler

具体的には、これは Python 2.5.1 のレガシー製品で、多数のバックポート (Fedora 8 です、はい、わかっています...) が対象です。いいえ、OS や Python のバージョンは変更できませんし、大きな問題なしに Python を再コンパイルすることもできません。セグメント違反が発生する環境が 1 つしかない顧客のために、C 拡張機能を 1 つだけ構築する必要があります。

ベストアンサー1

  • CFLAGS="-O0"実行する前に以下を追加してくださいsetup.py:

    % CFLAGS="-O0" python ./setup.py
    

    -O0コンパイル中に追加されるためCFLAGS、以前の-O2設定が上書きされます。

  • 別の方法は、次のものを追加すること-O0です:extra_compile_argssetup.py

    moduleA = Extension('moduleA', .....,
            include_dirs = ['/usr/include', '/usr/local/include'], 
            extra_compile_args = ["-O0"], 
            )
    
  • すべてのデフォルトフラグを削除する場合は、次を使用します。

    % OPT="" python ./setup.py
    

おすすめ記事