Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

  • Предварительно запустите CFLAGS="-O0" перед запуском setup.py:

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

    При компиляции к CFLAGS будет добавлен -O0, поэтому будет отменять предыдущий параметр -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