【问题标题】:Building crti.o for i386为 i386 构建 crti.o
【发布时间】:2010-10-10 08:25:58
【问题描述】:

我正在尝试构建一个交叉编译器,其中 x86_64 为主机,i386 为目标。我得到了(所有常见的)crti.o:没有这样的文件错误。而不是从发行版中获取已经构建的 crti.o 和 crtn.o……我该如何从 glibc(或可能的 gcc)源中显式构建这些文件?

仅供参考,我很清楚 x86_64 编译器的 -m32 选项。我宁愿只有一个 32 位的编译器环境。另外,我不想使用任何已经构建的 i386 编译器的原因是因为我计划根据我的测试需要混合和匹配 glibc/binutils/gcc 版本。

谢谢, 陈兹

【问题讨论】:

标签: gcc x86-64 glibc 32-bit


【解决方案1】:

您确定您使用的交叉编译配置正确吗?应该是

CBUILD = CHOST = x86_64-pc-linux-gnu
CTARGET = i386-pc-linux-gnu

当您在 x86_64 上运行构建时,编译器将在 x86_64 上运行,从而为 i386 生成代码。

如果您使用CHOST = i386-pc-linux-gnu,您将尝试生成 32 位二进制文​​件,这需要与 32 位 libc 链接。这很好,如果你已经有一个 32 位的 libc,但听起来你没有。

$ tar xvjf gcc-*.tar.bz2
$ cd gcc-*/
$ mkdir 构建
$ cd 构建
$ ../configure --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=i386-pc-linux-gnu

【讨论】:

    【解决方案2】:

    这是一种可能性(来自here

    您需要安装发行版的 32 位 libc-dev 包,或者你需要 --disable-multilib 这将导致编译器不支持 32 位模式。

    【讨论】:

    • 我只想要 32 位,而不是相反。我不想使用发行版副本...我想从源代码构建。请阅读仅供参考。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 2014-05-12
    • 2010-12-04
    相关资源
    最近更新 更多