我想從OS X 10.7 + Eclipse構建系統爲Linux服務器編譯二進制文件。這意味着一個GCC交叉編譯器。我從本機4.7.1開始,併爲主機4.7.1拍攝。從OS X交叉編譯到Linux
大多數在線指令都是針對嵌入式開發的。我想使用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 - 與-MPC = /選擇/本地前綴=在/ usr /本地/交叉/ Linux的--target = x86_64的-PC-Linux的GNU --disable-NLS
點構建環境在十字架使用config
0 -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
生成的glibc-2.
../glibc/configure --host = x86_64-pc-linux-gnu --build = x86_64-apple-darwin11 --prefix =/usr/local/cross/linux/--with-binutils =/usr /本地/交叉/ LINUX /斌/ --with報頭=的/ usr /本地/交叉/ LINUX /包含/ libc_cv_forced_unwind = YES libc_cv_ctors_header =是libc_cv_c_cleanup =是
失敗:
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
?
@DietrichEpp你能澄清嗎?爲什麼任何交叉編譯器需要主機操作系統的任何東西?關於整個工具鏈,原則上有點腥意。這是一個分期問題嗎?就像試圖在本地平臺上使用Linux庫從第2階段到第3階段一樣? – Potatoswatter 2012-08-09 02:51:58
對不起,我看錯了。 – 2012-08-09 02:54:17
似乎它會爲你節省幾天的時間來安裝虛擬機。交叉編譯是一個真正的熊。 – 2012-08-09 02:55:03