Quiero compilar archivos binarios para un servidor Linux desde un sistema de compilación OS X 10.7 + Eclipse. Esto significa un compilador cruzado de GCC. Estoy comenzando desde el nativo 4.7.1 y estoy grabando para un host 4.7.1.Compilación cruzada a Linux desde OS X
La mayoría de las instrucciones en línea son específicas del desarrollo integrado. Quiero usar libstdC++ - v3 y glibc, que lo hacen un poco diferente.
Lo que sucede:
instalar paquetes
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
Crea e instala binutils-2,22
make all-gcc
ymake install-gcc
Se utiliza la siguiente configuración:
$ ../gcc/configure --enable-languages = c, C++, objc, obj-C++ --with-gmp =/opt/local --with-mpfr =/opt/local - con-MPC =/opt/local --prefix =/usr// cruz/Linux locales --target = x86_64-pc-linux-gnu --disable-nls
punto el entorno de construcción en la cruz -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
Construir glibc-2.16 utilizando la configuración
../glibc/configure --host = x86_64-pc-linux-gnu --build = x86_64-apple-darwin11 --prefix =/usr/local/cross/linux/--with-binutils =/usr/local/cruz/Linux/bin/--con-headers =/usr/local/cruz/linux/include/libc_cv_forced_unwind = yes libc_cv_ctors_header = yes libc_cv_c_cleanup = yes
El fracaso:
glibc build falla antes de tiempo. Este mensaje aparece muchas veces:
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.
Esto puede ser normal, sin embargo.
Luego no produce stdio_lim.h
. Con make -d
, me sale esto:
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.
Esta es la primera cabecera se intenta construir en bits
. Hay un archivo stdio_lim.h.in
, que es el único archivo .in
en su directorio. ¿Alguna regla debe estar conectando .st
a .in
?
@DietrichEpp ¿Puedes aclarar? ¿Por qué debería cualquier compilador cruzado requerir algo del sistema operativo host? Hay algo muy sospechoso en principio sobre toda la cadena de herramientas. ¿Es un problema de puesta en escena? ¿Como intentar usar las bibliotecas de Linux en la plataforma nativa para pasar de la etapa 2 a la etapa 3? – Potatoswatter
Lo siento, lo leí mal. –
Parece que le ahorraría algunos días de su vida para instalar una máquina virtual. La compilación cruzada es un oso real. –