Ich möchte Binärdateien für einen Linux-Server von einem OS X 10.7 + Eclipse-Build-System kompilieren. Dies bedeutet einen GCC-Cross-Compiler. Ich beginne mit nativen 4.7.1 und schieße auf einen Host 4.7.1.Cross-kompilieren zu Linux von OS X
Die meisten Online-Anweisungen beziehen sich auf die Embedded-Entwicklung. Ich möchte libstdC++ - v3 und glibc verwenden, die es ein wenig anders machen.
Was folgt:
Pakete installieren
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
Fabrikat und installieren binutils-2,22
make all-gcc
undmake install-gcc
die folgende Konfiguration verwendet:
$ ../gcc/configure --enable-sprachen = c, C++, objc, obj-C++ - mit-gmp =/opt/lokal --with-mpfr =/opt/local - mit-mpc =/opt/local prefix =/usr/local/cross/linux --target = x86_64-pc-linux-gnu --disable-nls
Richten Sie die Build-Umgebung am Kreuz -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
Build-glibc-2.16 mit der Config
../glibc/configure --host = x86_64-pc-linux-gnu --build = x86_64-apple-darwin11 --prefix =/usr/lokal/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
Das Scheitern:
glibc build schlägt in Kürze fehl. Diese Meldung wird häufig angezeigt:
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.
Dies kann jedoch normal sein.
Dann kann es nicht stdio_lim.h
produzieren. Mit make -d
ich diese:
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.
Dies ist der erste Kopf es in bits
aufzubauen versucht. Es gibt eine Datei stdio_lim.h.in
, die die einzige .in
Datei in ihrem Verzeichnis ist. Sollte eine Regel .st
mit .in
verbinden?
@DietrichEpp Können Sie klären? Warum sollte ein Cross-Compiler etwas vom Host-Betriebssystem verlangen? Über die gesamte Toolchain ist grundsätzlich etwas sehr faul. Ist es ein Inszenierungsproblem? Wie der Versuch, Linux-Bibliotheken auf der nativen Plattform zu verwenden, um von Stufe 2 zu Stufe 3 zu gelangen? – Potatoswatter
Sorry, ich habe es falsch gelesen. –
Scheint, es würde Ihnen ein paar Tage Ihres Lebens sparen, nur um eine VM zu installieren. Cross-Compiling ist ein echter Bär. –