2010-06-04 10 views
10

El modificador --sysroot es útil cuando no desea que los encabezados/bibliotecas en las rutas estándar afecten su compilación.Alternativas al interruptor --syroot de gcc?

--sysroot=dir: Utilice dir como el directorio raíz lógica para las cabeceras y bibliotecas . Por ejemplo, si el compilador normalmente buscaría encabezados en/usr/include y las librerías en/usr/lib, buscará en su lugar dir/usr/include y dir/usr/lib. [ref]

¿Puede lo mismo puede lograr mediante el uso de variables de entorno, las especificaciones de GCC de archivo o cualquier otro método que no requieren interruptores de línea de comandos?

Respuesta

7

Si puede usar variables de entorno, puede agregar --sysroot a CFLAGS.

3

Puede crear un script de envoltura alrededor de gcc que ejecute el gcc real con los indicadores que desee. Esto funciona con Makefiles y compilaciones complejas que alteran las variables de entorno. Solo necesita asegurarse de que su script gcc sea más antiguo en la RUTA que el binario real de gcc. El guión en sí está a sólo dos líneas,

#!/bin/sh 
exec /usr/bin/gcc --sysroot=/your/sysroot "[email protected]" 

$HOME/bin y si es al principio de su ruta, puede poner el script en $HOME/bin, y no afectará a los otros usuarios.

Si usted tiene un script que se ve configure expresamente gcc en /usr/bin/, puede que tenga que cambiar el nombre a /usr/bin/gcc/usr/bin/gcc.bin, y el nombre de su script /usr/bin/gcc. Esto afectará a todos los usuarios. Si usted necesita esto, sino que también quiere que afectan sólo a determinado usuario o usuarios, utiliza

#!/bin/sh 
[ "$(id -un)" -eq "theuser" ] && exec /usr/bin/gcc.bin --sysroot=/your/sysroot "[email protected]" 
exec /usr/bin/gcc.bin "[email protected]" 

Usted puede hacer variantes, por ejemplo, cuentas de usuario específicas o membresías de grupos para establecer un sysroot específico, usando el mismo esquema.

+0

Esta es la única solución cuando intenté realizar una compilación cruzada de AXIS2/C. Por misteriosas razones, el archivo MAKE de AXIS2/C acaba de quitar las opciones "--sysroot" que puse en las variables de entorno CFLAGS, LDFLAGS y LIBS cuando se vincula el sharedlib. También intenté desactivar la opción compartida con ./configure --disable-shared, pero el enlazador se quejará del error "símbolo duplicado" durante la fase final de enlace. – RichardLiu

+0

@RichardLiu: si ejecuta 'util/autogen.sh' para AXIS2/C 1.6.0, crece una nueva opción de configuración' --with-sysroot = DIR'. Parece que solo pasó a libtool, sin embargo. Agregar la opción de configuración '--with-cflags-sysroot' (alrededor de 30 líneas en cada' configure.ac') parece funcionar. ¿Quieres probar ese parche? Todo el proyecto parece obsoleto, ya que falla en el primer archivo que intenta compilar ('util/src/platforms/unix/uuid_gen_unix.c') en mi máquina de desarrollo. –

Cuestiones relacionadas