Zajęło to trochę czasu, zanim było dobrze. Miałem ten problem podczas kompilacji krzyżowej w Ubuntu dla celu ARM. Rozwiązałem to za pomocą:
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
Zauważ, że CFLAGS nie jest używany z autogen.sh/configure, użycie go spowodowało błąd: "configure: błąd: kompilator C nie może tworzyć plików wykonywalnych". W środowisku budowania użyłem skryptu autogen.sh, jeśli nie masz substytutu skryptu autogen.sh ./autogen.sh z ./configure w powyższym poleceniu. Uruchomiłem config.guess w systemie docelowym, aby uzyskać parametr --host.
Po pomyślnym uruchomieniu autogen.sh/configure, skompiluj z:
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
Wybrane przeze mnie CFLAGS to: "-march = armv5te -fno-tree-vectorize -mthumb-interwork -mcpu = arm926ej-s". Prawidłowe skonfigurowanie wszystkich katalogów plików nagłówkowych zajmie trochę czasu: możesz chcieć, aby niektóre z nich wskazywały na Twój cross-kompilator, a inne na pliki głównego systemu plików i prawdopodobnie wystąpią pewne konflikty.
Jestem pewien, że to nie jest doskonała odpowiedź. I nadal widzę, że niektóre zawierają katalogi wskazujące / a nie / ccrootfs w plikach Makefiles. Chciałbym wiedzieć, jak to naprawić. Mam nadzieję, że to komuś pomoże.
export C_INCLUDE_PATH=~/local/include:$C_INCLUDE_PATH
, Twój kompilator będzie szukał najpierw w~/local/include
, a w $ C_INCLUDE_PATH tylko wtedy, gdy nie znalazł uwzględnienia w pierwszym katalogu.