2011-10-19 5 views
14

Estoy intentando construir OpenSSL con -Wa, - noexecstack, pero no puedo encontrar en ninguna parte de su línea de comandos config para proporcionar este indicador. Intenté configurar CFLAGS, pero parece ignorarlo y solo usar el suyo.¿Cómo se pueden proporcionar indicadores personalizados de compilador/enlazador para OpenSSL?

Se trata de una compilación automatizada que funciona con una copia limpia del código fuente de OpenSSL, por lo que un solo hack del script de configuración no es realmente una opción.

¿Hay alguna forma de pasar indicadores personalizados al proceso de compilación de OpenSSL?

+0

Tenga en cuenta que la documentación realidad sugiere que haga esas ediciones desea evitar - ve https://wiki.openssl.org/index.php/Compilation_and_Installation#Modifying_Build_Settings, donde hablan sobre el funcionamiento de sed como parte de tu construcción. –

Respuesta

12

El script config ignora CFLAGS, pero no CC. Para que pueda especificar su compilador y darle las banderas al mismo tiempo:

export CC="gcc -Wall -DHELLO_WORLD"; ./config 

alternativa, puesto que config detecta automáticamente su plataforma y luego corre Configure con la configuración del compilador preestablecidos, puede agregar las opciones del compilador para la configuración de la plataforma . Por ejemplo, para mi mac, veo esta línea la primera vez que corro config:

Operating system: i386-apple-darwinDarwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 
Configuring for darwin-i386-cc 

Así que si abro Configure, puedo buscar darwin-i386-cc y añadir las banderas a los preajustes.

Si no está utilizando una configuración preestablecida, simplemente pasará las banderas directamente al Configure en la línea de comandos y las usará.

3

Tarde para la fiesta, pero otra forma de hacerlo es realizar una edición automática del archivo MAKE generado. Por ejemplo, para agregar -DPURIFY a las banderas, lo primero que hago al configurar regular, entonces:

perl -i~ -plwe 's!^(CFLAG=.*$)!$1 -DPURIFY!' Makefile 

No es la solución más elegante, pero funciona para mí.

+0

Esta parece ser la única forma de eliminar o reemplazar una bandera. –

20

Más tarde a la fiesta, pero esta parece ser la forma correcta de hacerlo.

De la ayuda config guión:

$ ./config -h 
Usage: config [options] 
-d Add a debug- prefix to machine choice. 
-t Test mode, do not run the Configure perl script. 
-h This help. 

Any other text will be passed to the Configure perl script. 
See INSTALL for instructions. 

Así que el guión config reenvía opciones "inesperados" en el guión Configure. Bueno, vamos a ver lo que el guión Configure tiene que decir al respecto:

$ ./Configure --help 
Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimental-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-dso] [no-krb5] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--test-sanity] os/compiler[:flags] 

ver la parte [:flags] al final de esa larga línea? También hay un comentario en el archivo:

# -<xxx> +<xxx> compiler options are passed through 

No es tan obvio, ya que no sigue los estándares conocidos, pero la respuesta es: acaba de añadir las opciones hasta el final de la línea de comandos config.

Como ha pasado mucho tiempo desde que envió la pregunta, debo añadir:

  • puede que no funcione para la versión de OpenSSL que está trabajando (el mío es OpenSSL 1.0);
  • Me sentí obligado a publicar esta respuesta ya que ninguna de las respuestas anteriores resolvió mi problema y me tomó un tiempo encontrar la solución.
+1

Resulta que esto no es útil. La mayoría de las veces vas a necesitar _set_ cflags; esto solo los agrega. No ayuda a deshacerse de los malos que ya están allí. –

Cuestiones relacionadas