Я хочу скомпилировать двоичные файлы для сервера Linux из системы сборки OS X 10.7 + Eclipse. Это означает кросс-компилятор GCC -. Я начинаю с родной 4.7.1 и стреляю на хост 4.7.1.
Большинство онлайн-инструкций относятся к разработке встраиваемых систем. Я хочу использовать libstdc++ -v3 и glibc, которые делают его немного другим.
Установить пакеты
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
Сделайте и установите binutils -2.22
make all-gcc
иmake install-gcc
Использовал следующий конфиг:
$../gcc/configure --enable-languages=c,c++,objc,obj-c++ --with-gmp=/opt/local --with-mpfr=/opt/local --with-mpc=/opt/local --prefix=/usr/local/cross/linux --target=x86_64-pc-linux-gnu --disable-nls
Укажите среду сборки на перекрестный -компилятор
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
Собрать glibc -2.16 с помощью конфига
../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
Сборка glibc вскоре завершается ошибкой. Это сообщение появляется много раз:
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.
Хотя это может быть и нормально.
Тогда он не производит stdio_lim.h
. С make -d
я получаю это:
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.
Это первый заголовок, который он пытается построить в bits
. Существует файл stdio_lim.h.in
, который является единственным файлом .in
в своем каталоге. Должно ли какое-то правило соединять .st
с .in
?