linux - asn1 encoding routines asn1_check_tlen wrong tag tasn_dec c 1199
¿Cómo se pueden proporcionar indicadores personalizados de compilador/vinculador para OpenSSL? (3)
Estoy tratando de construir OpenSSL con -Wa, - noexecstack, pero no puedo encontrar en ninguna parte de su línea de comandos de configuración para proporcionar este indicador. He intentado establecer CFLAGS, pero parece ignorar eso y solo usar el suyo.
Esta es una compilación automatizada que funciona a partir de una copia limpia de la fuente de OpenSSL, por lo que un truco de una sola vez del script de configuración no es realmente una opción.
¿Hay una manera de pasar banderas personalizadas al proceso de construcción de OpenSSL?
Más tarde a la fiesta, pero esta parece ser la forma correcta de hacerlo.
Desde la ayuda del script de config
:
$ ./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 script de config
reenvía las opciones "inesperadas" al script de Configure
. Bueno, veamos lo que el script de 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 línea larga? También hay un comentario dentro del archivo:
# -<xxx> +<xxx> compiler options are passed through
No es tan obvio ya que no sigue estándares conocidos, pero la respuesta es: simplemente agregue las opciones al final de la línea de comandos de config
.
Como ha pasado mucho tiempo desde que publicó la pregunta, debo agregar:
- puede que no funcione con la versión de OpenSSL con la 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 poco de tiempo encontrar esa solución.
Tarde a la fiesta, pero otra forma de hacerlo es hacer una edición automatizada del makefile generado. Por ejemplo, para agregar -DPURIFY
a los indicadores, primero hago la configuración regular, luego:
perl -i~ -plwe ''s!^(CFLAG=.*$)!$1 -DPURIFY!'' Makefile
No es la solución más elegante, pero funciona para mí.
La secuencia de comandos de config
ignora CFLAGS
, pero no CC
. Para que puedas especificar tu compilador y darle las banderas al mismo tiempo:
export CC="gcc -Wall -DHELLO_WORLD"; ./config
Alternativamente, dado que config
detecta automáticamente su plataforma y luego ejecuta Configure
con configuraciones de compilador preestablecidas, puede agregar los indicadores del compilador a su configuración de plataforma. Por ejemplo, para mi mac, veo esta línea cuando ejecuto 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 agregar las banderas a los ajustes preestablecidos.
Si no está utilizando una configuración preestablecida, simplemente pasaría los indicadores directamente a Configure
en la línea de comandos y los usará.