2011-08-03 15 views
42

Entiendo que setup.py usa los mismos CFLAGS que se usaron para construir python. Tengo una sola extensión de C que está segfaulting. Necesito construirlo sin-O2 porque -O2 está optimizando algunos valores y códigos para que los archivos del núcleo no sean suficientes para precisar el problema.¿Cómo puedo anular los indicadores del compilador (gcc) que usa setup.py de manera predeterminada?

Solo necesito modificar setup.py para que -O2 no se use.

He leído la documentación de distutils, en particular distutils.ccompiler y distutils.unixcompiler y veo cómo agregar banderas y libs e incluye, pero no cómo modificar las banderas gcc predeterminadas.

Específicamente, esto es para un producto heredado en Python 2.5.1 con un grupo de backports (Fedora 8, sí, lo sé ...). No, no puedo cambiar la versión de SO o Python y no puedo, sin grandes problemas, recompilar Python. Solo necesito compilar una extensión de C para un cliente cuyo entorno es el único segfaulting.

Respuesta

56
  • Prepend CFLAGS="-O0" antes de ejecutar setup.py:

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

    El -O0 se anexará a CFLAGS durante la compilación, por lo tanto anulará la configuración anterior -O2.

  • Otra forma es añadir a -O0extra_compile_args en setup.py:

    moduleA = Extension('moduleA', ....., 
         include_dirs = ['/usr/include', '/usr/local/include'], 
         extra_compile_args = ["-O0"], 
         ) 
    
  • Si quiere remover todas las opciones por defecto, utilice:

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