gpt4 book ai didi

linux - 从 OS X 交叉编译到 Linux

转载 作者:IT王子 更新时间:2023-10-29 00:59:06 25 4
gpt4 key购买 nike

我想从 OS X 10.7 + Eclipse 构建系统为 Linux 服务器编译二进制文件。这意味着 GCC 交叉编译器。我从 native 4.7.1 开始,正在为主机 4.7.1 拍摄。

大多数在线说明都是针对嵌入式开发的。我想使用 libstdc++-v3 和 glibc,这让它有点不同。

什么成功了:

  1. 安装包

    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
  2. 制作并安装 binutils-2.22

  3. 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

  4. 将构建环境指向交叉编译器

    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
  5. 使用配置构建 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 中构建的第一个 header 。有一个文件stdio_lim.h.in,这是其目录中唯一的.in文件。一些规则是否应该将 .st 连接到 .in

最佳答案

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

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

自从我致力于创建交叉编译器以来已经有很长时间了,所以我无法告诉您如何构建 glibc 以查看 header ,但我相信它可以以直接的方式完成。

关于linux - 从 OS X 交叉编译到 Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11876066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com