Chcę skompilować pliki binarne dla serwera Linux z systemu kompilacji OS X 10.7 + Eclipse. Oznacza to krzyżowy kompilator GCC. Zaczynam od natywnego 4.7.1 i strzelam do gospodarza 4.7.1.Kompilacja krzyżowa do systemu Linux z OS X
Większość instrukcji online dotyczy oprogramowania wbudowanego. Chcę użyć libstdC++ - v3 i glibc, które sprawiają, że jest trochę inny.
Co powiedzie:
Instalacja pakietów
port install gcc47 export CC=gcc-mp-47 export LD=ld-mp-47 export CXX=g++-mp-47 export CPP=cpp-mp-47 port install gmake ln /opt/local/bin/gmake /opt/local/bin/make port install gsed ln /opt/local/bin/gsed /opt/local/bin/sed port install gawk port install autoconf port install msgfmt
Marka i zainstalować binutils-2,22
make all-gcc
imake install-gcc
zastosowano następujące config:
$ ../gcc/configure --enable-languages = c, C++, objc, obj-C++ --with-gmp =/opt/local --with-mpfr =/opt/local - z-MPC =/opt/local prefix =/usr/local/cross/linux --target = x86_64-pc-linux-gnu --disable-nls
Punkt środowisko kompilacji pod krzyżem -compiler
export CC=/usr/local/cross/linux/bin/x86_64-pc-linux-gnu-gcc export LD=/usr/local/cross/linux/bin/x86_64-pc-linux-gnu-ld export AR=/usr/local/cross/linux/bin/x86_64-pc-linux-gnu-ar export CXX=/usr/local/cross/linux/bin/x86_64-pc-linux-gnu-g++ export CPP=/usr/local/cross/linux/bin/x86_64-pc-linux-gnu-cpp
budowy glibc-2.16 stosując config
../glibc/configure --host = x86_64-pc-linux-gnu - build = x86_64-apple-darwin11 --prefix =/usr/local/cross/linux/--with-binutils =/usr/local/cross/linux/bin/--with-headers =/usr/local/cross/linux/include/libc_cv_forced_unwind = yes libc_cv_ctors_header = yes libc_cv_c_cleanup = yes
niepowodzenie:
Kompilacja glibc kończy się niepowodzeniem. Ten komunikat pojawia się wiele razy:
In file included from ./sysdeps/unix/sysdep.h:20:0,
from ./sysdeps/unix/x86_64/sysdep.h:18,
from sysdeps/unix/sysv/linux/x86_64/sysdep.h:22,
from <stdin>:1:
sysdeps/unix/sysv/linux/sys/syscall.h:24:24: fatal error: asm/unistd.h: No such file or directory
compilation terminated.
Może to być jednak normalne.
Następnie nie można uzyskać stdio_lim.h
. Z make -d
, otrzymuję to:
Successfully remade target file `/Users/dkrauss/Documents/work/glibc-build/csu/abi-tag.h'.
Considering target file `/Users/dkrauss/Documents/work/glibc-build/bits/stdio_lim.h'.
File `/Users/dkrauss/Documents/work/glibc-build/bits/stdio_lim.h' does not exist.
Looking for an implicit rule for `/Users/dkrauss/Documents/work/glibc-build/bits/stdio_lim.h'.
Trying pattern rule with stem `lim'.
Trying implicit prerequisite `/Users/dkrauss/Documents/work/glibc-build/bits/stdio_lim.st'.
Found an implicit rule for `/Users/dkrauss/Documents/work/glibc-build/bits/stdio_lim.h'.
Considering target file `/Users/dkrauss/Documents/work/glibc-build/bits/stdio_lim.st'.
Recently tried and failed to update file `/Users/dkrauss/Documents/work/glibc-build/bits/stdio_lim.st'.
make[2]: *** No rule to make target `/Users/dkrauss/Documents/work/glibc-build/bits/stdio_lim.st', needed by `/Users/dkrauss/Documents/work/glibc-build/bits/stdio_lim.h'. Stop.
To pierwszy nagłówek próbuje budować w bits
. Jest plik stdio_lim.h.in
, który jest jedynym plikiem .in
w swoim katalogu. Czy jakaś reguła powinna łączyć się z .st
na .in
?
@DietrichEpp Czy możesz wyjaśnić? Dlaczego każdy krzyżowy kompilator potrzebuje czegokolwiek z hosta? Zasadniczo jest coś bardzo podejrzanego w całym łańcuchu narzędzi. Czy to jest kwestia inscenizacji? Jak próba użycia bibliotek Linuksa na rodzimej platformie, aby przejść od etapu 2 do etapu 3? – Potatoswatter
Przepraszam, przeczytałem źle. –
Wygląda na to, że zaoszczędzisz kilka dni swojego życia, aby zainstalować maszynę wirtualną. Kompilacja krzyżowa to prawdziwy niedźwiedź. –