Как я могу переопределить флаги компилятора (gcc), которые setup.py использует по умолчанию? - PullRequest
48 голосов
/ 03 августа 2011

Я понимаю, что setup.py использует те же CFLAGS, которые использовались для сборки python.У меня есть одно расширение C нашего, которое является segfaulting.Мне нужно собрать его без -O2, потому что -O2 оптимизирует некоторые значения и код, так что файлов ядра недостаточно для определения проблемы.

Мне просто нужноизмените setup.py так, чтобы -O2 не использовался.

Я прочитал документацию distutils, в частности distutils.ccompiler и distutils.unixcompiler, и посмотрел, как добавлять флаги, библиотеки и включения, но не какизмените стандартные флаги gcc.

В частности, это для устаревшего продукта на Python 2.5.1 с кучей обратных портов (Fedora 8, да, я знаю ...).Нет, я не могу изменить версию ОС или python и не могу без особых проблем перекомпилировать python.Мне просто нужно создать одно расширение C для одного клиента, среда которого является единственным segfaulting.

1 Ответ

67 голосов
/ 03 июня 2012
  • Prepend CFLAGS="-O0" перед запуском setup.py:

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

    При компиляции -O0 будет добавлено к CFLAGS, поэтому будет отменено предыдущее -O2

  • Другой способ - добавить -O0 к extra_compile_args в setup.py:

    moduleA = Extension('moduleA', .....,
            include_dirs = ['/usr/include', '/usr/local/include'], 
            extra_compile_args = ["-O0"], 
            )
    
  • Если вы хотите удалитьвсе флаги по умолчанию, используйте:

    % OPT="" python ./setup.py
    
...