2011-08-03 5 views
42

私は、setup.pyがPythonをビルドするのに使用されたものと同じCFLAGSを使用することを理解します。私はsegfaultingである私たちの単一のC拡張を持っています。-O2を使わないでを構築する必要があります。-O2は、コアファイルが問題をピン止めするのに十分でないようにいくつかの値とコードを最適化しているためです。setup.pyがデフォルトで使用するコンパイラ(gcc)フラグをどのように上書きすることができますか?

-O2が使用されないようにsetup.pyを変更する必要があります。

私はdistutilsのドキュメント、特にdistutils.ccompilerdistutils.unixcompilerを読んだことがあります。フラグとライブラリを追加する方法と組み込み方法を見ていますが、デフォルトのgccフラグを変更する方法はありません。

具体的には、これはPython 2.5.1のレガシー製品で、バックポートがたくさんある(Fedora 8、はい、私は知っている...)。いいえ、OSやPythonのバージョンを変更することはできません。大きな問題がなければ、Pythonを再コンパイルすることはできません。私はちょうど環境が唯一のsegfaultingである1つの顧客のためにC拡張の1つを構築する必要があります。

答えて

56
  • 前に付加CFLAGS="-O0"あなたがsetup.pyを実行する前に:

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

    コンパイル中-O0CFLAGSに追加されます、したがって、以前-O2の設定を上書きします。使用、

    moduleA = Extension('moduleA', ....., 
         include_dirs = ['/usr/include', '/usr/local/include'], 
         extra_compile_args = ["-O0"], 
         ) 
    
  • あなたはすべてデフォルトのフラグを削除する場合:

    % OPT="" python ./setup.py 
    

  • もう一つの方法は、setup.pyextra_compile_args-O0を追加することです

  • 関連する問題