¿Cómo agregar rutas de inclusión y biblioteca para configurar / hacer un ciclo?

81

Necesito un lugar para instalar bibliotecas en una caja de Linux a la que no tengo acceso. Estoy usando ~ / local [/ bin, / lib, / include], pero no sé cómo puedo decirle a ./configure que busque bibliotecas allí (en particular, estoy tratando de compilar emacs, que necesita libgif , que no viene en mi distribución).

Intenté agregar

export PATH=$PATH:~/local/bin
export LD_LIBRARY_PATH=~/local/lib
export C_INCLUDE_PATH=~/local/include
export CPLUS_INCLUDE_PATH=~/local/include

a .bashrc pero no parece funcionar.

Lacrimología
fuente
4
Tenga en cuenta que, a excepción de la RUTA, sobrescribe las predeterminadas de su sistema. Si crea algo como export C_INCLUDE_PATH=~/local/include:$C_INCLUDE_PATH, su compilador buscará primero en ~/local/include$ C_INCLUDE_PATH y en $ C_INCLUDE_PATH solo si no encontró la inclusión en el primer directorio.
Marc Plano-Lesay

Respuestas:

98

Quieres un archivo config.site. Tratar:

$ mkdir -p ~ / local / compartir
$ cat << EOF> ~ / local / share / config.site
CPPFLAGS = -I $ HOME / local / include
LDFLAGS = -L $ INICIO / local / lib
...
EOF

Siempre que invoque un script de configuración generado por autoconf con --prefix = $ HOME / local, se leerá el config.site y se harán todas las asignaciones por usted. CPPFLAGS y LDFLAGS deberían ser todo lo que necesita, pero también puede realizar cualquier otra asignación que desee (de ahí el ... en el ejemplo anterior). Tenga en cuenta que los indicadores -I pertenecen a CPPFLAGS y no a CFLAGS, ya que -I está destinado al preprocesador y no al compilador.

William Pursell
fuente
Guillermo; Un agradecimiento, fue un gran consejo sobre CPPFLAGS para construir sobre un host compartido. Ahorró muchas palizas con ejecuciones fallidas ./configure hoy, debido a su nota.
Brian Tiffin
29

Configure LDFLAGS y CFLAGS cuando ejecute make:

$ LDFLAGS="-L/home/me/local/lib" CFLAGS="-I/home/me/local/include" make

Si no quiere hacer eso un trillón de veces, expórtelos en su .bashrc (o su equivalente de shell). También configure LD_LIBRARY_PATH para incluir / home / me / local / lib:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/local/lib
long404
fuente
cuando agrego LDFLAGS y CFLAGS a .bashrc ./configure falla con una configuración: error: el compilador de C no puede crear ejecutables ...
Lacrymology
Probablemente estén anulando los parámetros del compilador de código de prueba de configuración. Simplemente use la captura previa de make env. También intente ver si configure aún no tiene una opción para anular libgif. Si los scripts de autotools están hechos correctamente, le permitirá especificar una ruta donde está instalado libgif (por ejemplo, anular la ubicación predeterminada de la biblioteca). Esa sería la solución más limpia.
long404
misma diferencia .. tneme @ ws16lab07: ~ / Descargas / emacs-23.3 $ LDFLAGS = "- L / home / tneme / local / lib" CFLAGS = "- l / home / tneme / local / include" ./configure --prefix = "/ home / tneme / local" comprobando el tipo de sistema de compilación ... i686-pc-linux-gnu comprobando el tipo de sistema host ... i686-pc-linux-gnu comprobando gcc ... gcc comprobando si el compilador de C funciona ... no configure: error: in /home/tneme/Descargas/emacs-23.3': configure: error: C compiler cannot create executables See config.log 'para más detalles t
Lacrymology
estos deben definirse cuando "crea", no cuando "configura".
long404
Intenté configurar emacs 23 con estos y no obtuve el problema: LDFLAGS = "- L / home / me / local / lib" CFLAGS = "- I / home / me / local / include" ./configure comprobar el sistema de compilación escriba ... x86_64-unknown-linux-gnu comprobando el tipo de sistema host ... x86_64-unknown-linux-gnu comprobando gcc ... gcc comprobando el nombre del archivo de salida predeterminado del compilador C ... a.out comprobando si el C el compilador funciona ... sí comprobando si estamos compilando de forma cruzada ... no comprobando el sufijo de los ejecutables ... comprobando el sufijo de los archivos objeto ... o comprobando si estamos usando el compilador GNU C ... sí
long404
8

Esto tomó un tiempo para hacerlo bien. Tuve este problema al realizar una compilación cruzada en Ubuntu para un objetivo ARM. Lo resolví con:

PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib ./autogen.sh --build=`config.guess` --host=armv5tejl-unknown-linux-gnueabihf

Observe que CFLAGS no se usa con autogen.sh/configure, al usarlo me dio el error: "configure: error: el compilador C no puede crear ejecutables". En el entorno de compilación, estaba usando un script autogen.sh, si no tiene un script autogen.sh, sustituya ./autogen.sh con ./configure en el comando anterior. Ejecuté config.guess en el sistema de destino para obtener el parámetro --host.

Después de ejecutar con éxito autogen.sh/configure, compile con:

PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib CFLAGS="-march=... -mcpu=... etc." make

Los CFLAGS que elegí usar fueron: "-march = armv5te -fno-tree-vectorize -mthumb-interwork -mcpu = arm926ej-s". Tomará un tiempo configurar correctamente todos los directorios de inclusión: es posible que desee que algunos apunten a su compilador cruzado y otros que apunten a su sistema de archivos raíz, y es probable que haya algunos conflictos.

Estoy seguro de que esta no es la respuesta perfecta. Y todavía veo que algunos incluyen directorios que apuntan a / y no / ccrootfs en los Makefiles. Me encantaría saber cómo corregir esto. Espero que esto ayude a alguien.

Samuel
fuente