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.
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.