首页 文章

从OS X交叉编译到Linux

提问于
浏览
6

我想从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
  • 制作并安装binutils-2.22

  • make all-gccmake 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

1 回答

  • 1

    为了正确构建glibc,您需要来自Linux系统的头文件 - 可能内核头文件就足够了 .

    这是因为在该系统的软件的任何正常构建中都需要这些头,并且在交叉编译时也是如此 .

    自从我创建交叉编译器以来已经很长时间了,所以我不能告诉你如何使用glibc来构建 Headers ,但我相信它可以直接进行 .

相关问题