【问题标题】:Compile gcc on amd64, for running on i686, and target is mips在amd64上编译gcc,在i686上运行,目标是mips
【发布时间】:2018-10-25 15:56:52
【问题描述】:

我想为 MIPS 目标编译 gcc 和 binutils。我正在使用 64 位 (amd64) 机器。并且想要获得能够在 i686(不是 amd64)架构上运行的二进制文件?我应该如何配置和构建 gcc?

如果我将 --host=i686-linux-gnu 添加到 ./configure 脚本,则会抱怨缺少 i686-xxxx 工具。

如果我添加 CFLAGS=-m32,那么我可以构建 binutils,但不能构建 gcc,因为以下错误:

 g++   -g -O2 -DIN_GCC  -DCROSS_DIRECTORY_STRUCTURE  -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wmissing-format-attribute -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings   -DHAVE_CONFIG_H -DGENERATOR_FILE -static-libstdc++ -static-libgcc  -o build/genconstants \
build/genconstants.o build/read-md.o build/errors.o ../build-x86_64-unknown-linux-gnu/libiberty/libiberty.a
/usr/bin/ld: i386 architecture of input file `../build-x86_64-unknown-linux-gnu/libiberty/libiberty.a(concat.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: i386 architecture of input file `../build-x86_64-unknown-linux-gnu/libiberty/libiberty.a(fopen_unlocked.o)' is incompatible with i386:x86-64 output
...

【问题讨论】:

  • 看起来我忘记了第二个标志:CXXFLAG=-m32。所以,我需要两者:CFLAGS=-m32 和 CXXFLAGS=-m32。但是现在我遇到了以下错误:检查目标文件的后缀...配置:错误:在.../gcc-4.9.4/build/mips/libgcc':配置:错误:无法计算目标文件的后缀:无法编译有关详细信息,请参阅“config.log”。
  • FAQ 点 (gcc.gnu.org/wiki/…) config.log 可能包含错误,但我找不到任何错误(除了 gcc -V -- 错误选项)。
  • 发现,我有 libisl-0.18(当前 debian 中没有 0.15 版本的 i386),但 gcc 需要 0.15。在调用 download_prerequisites stript(在 gcc 目录中)后,进程开始......但又一次:配置:错误:无法计算目标文件的后缀:无法在 libgcc 中编译。没有想法,我应该在 config.log 中找到。
  • 我很好奇您为什么要制作针对 MIPS 的 i386 二进制文件。为什么不是针对 MIPS 的普通 x86-64 二进制文件?您是否有一些旧的 32 位 x86 机器想用于 MIPS 交叉开发,但又不想在该主机上使用 C 编译器?
  • 是的,我想为 32 位机器编译可再发行包。唯一的办法就是使用虚拟机,或者pbuilder?

标签: gcc cross-compiling x86-64 configure autoconf


【解决方案1】:

我找到了解决方案,需要在make命令行中传递以下环境变量:

CC="gcc -m32" CXX="g++ -m32" LDFLAGS=-m32

仅此而已。 CFLAGS 的导出将不起作用。您需要导出 CFLAGS、CXXFLAGS 和 LDFLAGS,但这里几乎没有陷阱:

  1. CFLAGS=-m32 也将被导出到不知道 -m32 标志的 MIPS 编译器(构建 libgcc 时失败);
  2. CXXFLAGS=-m32 对 gcc 使用的库有影响,配置脚本失败;
  3. 您可以改用 ALL_CFLAGS,但它不适用于 gcc 本身和 libcpp。

另见类似问题:Building 32 bit GCC from source on 64 bit: linking issue

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 2012-05-05
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多