Це зайняло деякий час, щоб виправитись. У мене виникла ця проблема при перехресній компіляції в Ubuntu для цілі ARM. Я вирішив це за допомогою:
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
Зверніть увагу, що CFLAGS не використовується з autogen.sh/configure, його використання дало мені помилку: "configure: error: C-компілятор не може створювати виконувані файли". У середовищі збірки я використовував сценарій autogen.sh, якщо у вас немає заміни сценарію autogen.sh ./autogen.sh за допомогою ./configure в команді вище. Я запустив config.guess у цільовій системі, щоб отримати параметр --host.
Після успішного запуску autogen.sh/configure скомпілюйте за допомогою:
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
CFLAGS, які я вибрав для використання, були: "-march = armv5te -fno-tree-vectorize -mthumb-interwork -mcpu = arm926ej-s". Щоб правильно налаштувати всі каталоги включення, знадобиться деякий час: можливо, вам знадобиться, щоб деякі включали вказівку на ваш крос-компілятор, а деякі вказували на вашу кореневу файлову систему, і, ймовірно, будуть деякі конфлікти.
Я впевнений, що це не ідеальна відповідь. І я все ще бачу, як деякі включають каталоги, що вказують на / а не / ccrootfs у файлах Makefiles. Хотілося б знати, як це виправити. Сподіваюся, це комусь допомагає.
export C_INCLUDE_PATH=~/local/include:$C_INCLUDE_PATH
, ваш компілятор буде шукати спочатку у~/local/include
, та в $ C_INCLUDE_PATH, лише якщо він не знайшов включення у першому каталозі.