Pot*_*ter 6 linux macos gcc cross-compiling
我想从OS X 10.7 + Eclipse构建系统编译Linux服务器的二进制文件.这意味着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
Run Code Online (Sandbox Code Playgroud)制作并安装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
Run Code Online (Sandbox Code Playgroud)使用config构建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.
Run Code Online (Sandbox Code Playgroud)
不过,这可能是正常的.
然后它无法生产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.
Run Code Online (Sandbox Code Playgroud)
这是它试图构建的第一个头bits.有一个文件stdio_lim.h.in,它是.in其目录中唯一的文件.一些规则应该连接.st到.in?
为了正确构建 glibc,您需要来自 Linux 系统的头文件 - 可能内核头文件就足够了。
这是因为在该系统的软件的任何正常构建中都需要这些标头,并且在交叉编译时也没有什么不同。
我已经很长时间没有致力于创建交叉编译器了,所以我无法告诉你如何让 glibc 的构建看到头文件,但我相信它可以以直接的方式完成。
| 归档时间: |
|
| 查看次数: |
3469 次 |
| 最近记录: |